[英]RewriteCond redirect a domain to another except for one script, do the opposite
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... 它必須 go(重定向)到.... www.ABC.com/this/123([az ]+).html(所以第二條規則之后適用)
編輯兩個域都停在同一主機上,因此共享 same.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
根據您上面的內容,這將產生以下影響:
<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 引用之外的任何流量都將重定向到 www.XYZ.com,代碼 HTTP 為 301(永久移動)。
請記住,您必須能夠將 mod_rewrite 規則放入 .htaccess 文件中。 為目錄選擇AllowOverride FileInfo
可以確保這一點。
您是否閱讀過有關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]
在 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
。
另請注意,我首先使用 RewriteRule 以避免 1 次額外轉發(上面的 RewriteRule #2)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.