3

我有一个网站:www.explainmortgage.com

在那个网站上,我有http://www.explainmortgage.comhttp://www.explainmortgage.com/mortgage(在许多其他页面中)。

http://www.explainmortgage.comhttp://www.explainmortgage.com/mortgage是相同的,所以我想 301 http://www.explainmortgage.com/mortgagehttp://www.explainmortgage.com

我对多个域使用相同的代码库,并且大多数都有类似的情况。

因此,我想编写一个 RewriteCond RewriteRule 对,以涵盖使用此代码库的所有域中的这种情况。

所以这是我想要的规则(在伪代码中):

if ({HTTP_HOST}) contains ({REQUEST_URI} minus the leading /)
then 301 to http://{HTTP_HOST}

例子:

{HTTP_HOST} == 'www.explainmortgage.com'
{REQUEST_URI} == '/mortgage'

{HTTP_HOST} == 'www.explaincars.com'
{REQUEST_URI} == '/cars'

{HTTP_HOST} == 'www.explaineducation.com'
{REQUEST_URI} == '/education'

{HTTP_HOST} == 'www.explainelectronics.com'
{REQUEST_URI} == '/electronics'

因此,如果有任何正则表达式大师愿意帮助我,我将不胜感激。

4

2 回答 2

3

尝试:

RewriteCond %{HTTP_HOST} ^(www\.)?explain([^\.]+)\.com$ [NC]
RewriteCond %{REQUEST_URI}:%2 ^/([^/]+)/?:\1 [NC]
RewriteRule ^ / [R=301,L]

这里的诀窍是首先将匹配项对 中的 之后explain和之前的.com任何内容进行分组%{HTTP_HOST},然后(因为我们不能在 a 的第二个参数中使用 % 变量RewriteCond)我们将 URI 和前一个反向引用放在一起,并使用 a\1来与之相匹配。如果它们相同,请重定向到/.

于 2012-08-01T18:02:15.700 回答
0

如果您只想http://www.explainmortgage.com/mortgage重定向到http://www.explainmortgage.com,则文件中的以下规则.htaccess将执行此操作。该NC标志使比较不区分大小写。这不会影响(重定向或重写)URI=/mortgage/

RewriteRule ^mortgage$ / [R=301,L,NC]

从您的评论中,您说您想将更多 URL 重定向到主页,那么以下内容可能有助于实现您想要的。以下将指向不存在的文件或目录的 URL 重定向到您在任何域上的主页。例如,如果“/mortgage”、“/bob”、“/carol”不作为文件存在,那么它们都将被重定向到“/”。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . / [R=301,L]
于 2012-08-01T16:01:24.680 回答