2

1)一般的に、www.ABC.comのすべてをwww.XYZ.comにリダイレクトしたい

2)www.ABC.com/this/123 ([az]+).htmlの場合を除いて、... www.ABC.com/that_script.php?var=123に書き換える(リダイレクトしない)必要があります。

3)例外: www.XYZ.com/this/123 ([az]+).htmlの場合... www.ABC.com/this/123([az]に移動(リダイレクト)する必要があります] +)。html(したがって、2番目のルールがその後適用されます)

編集両方のドメインが同じホスティングに駐車されているため、同じHTACCESSを共有します

EDIT2プロジェクトの言語はPHPです


%{REQUEST_URI}または%{SCRIPT_FILENAME}を使用してさまざまなRewriteCondを試しましたが、無限ループであるか、条件をまったく取得しないため、機能しません。


EDIT3 PHPでは、次のようになります...

if( FALSE !== strstr($_SERVER['HTTP_HOST'], 'ABC.com') && FALSE !== strstr($_SERVER['SCRIPT_FILENAME'], 'that_script') ) {
    header("Location: http://www.XYZ.com".$_SERVER['REQUEST_URI'],TRUE,301);
}
if( FALSE !== strstr($_SERVER['HTTP_HOST'], 'XYZ.com') && FALSE === strstr($_SERVER['SCRIPT_FILENAME'], 'that_script') ) {
    header("Location: http://www.ABC.com".$_SERVER['REQUEST_URI'],TRUE,301);
}

これが欲しいのですが、HTACCESSでは

4

3 に答える 3

1

あなたが上に持っているものに基づいて、それは次のような効果をもたらすでしょう:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
ReWriteRule ^/this/([a-z0-9]+).html www.ABC.com/that_script.php?var=$1 [PT,L]
RewriteCond %{HTTP_HOST} www.ABC.com$ [NC]
ReWriteRule ^(.*)$  www.XYZ.com [R=301,L]
</IfModule>

これは次のことを行います-

1-訪問者に言い続けている間、ヒットhttp://www.ABC.com/this/<Anything made of Numbers and Letters>するトラフィックはすべて通過します。http://www.ABC.com/that_script.php?var=<Anything made of Numbers and Letters>http://www.ABC.com/this/<Anything made of Numbers and Letters>

2-#1で参照されているもの以外にヒットするトラフィックは、HTTPコード301(永続的に移動)でwww.XYZ.comにリダイレクトされます。

.htaccessファイルにmod_rewriteルールを配置できる必要があることに注意してください。ディレクトリのオプションがあるAllowOverride FileInfoと、それが確実になります。

于 2012-04-10T15:39:39.027 に答える
0

mod_rewriteに関する公式ドキュメントを読みましたか?必要な情報はすべてマニュアルに記載されており、秘密はありません。

RewriteEngine On
RewriteBase /

# Redirect www.xyz.com/this/123([a-z]+).html to www.abc.com/this/123([a-z]+).html.
RewriteCond %{HTTP_HOST} ^www.xyz.com$ [AND]
RewriteCond %{REQUEST_URI} ^/this/123([a-z]+).html$
RewriteRule ^(.*)$ http://www.abc.com/$1 [R=301,L]

# Rewrite www.abc.com/this/123([a-z]+).html to www.abc.com/that_script.php?var=123.
RewriteCond %{HTTP_HOST} ^www.abc.com$ [NC]
RewriteRule ^/this/123([a-z]+)\.html$ /that_script.php?var=123 [L]

# Redirect everything else to www.xyz.com.
RewriteCond %{HTTP_HOST} ^www.abc.com$ [NC]
RewriteRule ^(.*)$ http://www.xyz.com/$1 [R=301,L]
于 2012-04-10T15:40:33.877 に答える
0

DOCUMENT_ROOTの下の.htaccessで次のコードを使用します。

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

# Redirect www.xyz.com/this/123([a-z]+).html to www.abc.com/that_script.php?var=123
RewriteCond %{HTTP_HOST} ^(www\.)?xyz\.com$ [NC]
RewriteRule ^this/(123)[a-z]+\.html$ http://www.abc.com/that_script.php?var=$1 [R,L,NC]

# Forward www.abc.com/this/123([a-z]+).html to www.abc.com/that_script.php?var=123
RewriteCond %{HTTP_HOST} ^(www\.)?abc\.com$ [NC]
RewriteRule ^this/(123)[a-z]+\.html$ that_script.php?var=$1 [L,QSA,NC]

# Redirect abc.com to www.xyz.com
RewriteCond %{HTTP_HOST} ^(www\.)?abc\.com$ [NC]
RewriteRule ^ http://www.xyz.com%{REQUEST_URI} [R,L]

すべて正常に機能していることを確認したら、すべてRをに変更します。R=301

また、1つの余分な転送を回避する方法で最初のRewriteRuleを使用したことにも注意してください(上記のRewriteRule#2)。

于 2012-04-11T13:44:10.440 に答える