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 (因此第二条规则将在此之后适用)

编辑两个域都停在同一个主机上,所以共享同一个 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 所引用的内容之外的任何流量都将被重定向到 www.XYZ.com,HTTP 代码为 301(永久移动)。

请记住,您必须能够将 mod_rewrite 规则放入您的 .htaccess 文件中。选择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

另请注意,我使用了第一个 RewriteRule 以避免 1 个额外的转发(上面的 RewriteRule #2)。

于 2012-04-11T13:44:10.440 回答