重定向无法正常工作

时间:2011-12-24 23:33:19

标签: .htaccess mod-rewrite url-rewriting

我有一个小的htaccess文件,其中包含一些简单的规则 首先,我想在主域开头重定向或添加 www

RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www|serv)\.(.*\-.*)\.com [NC]
RewriteRule ^(.*) http://www.maindomain.com%{REQUEST_URI} [L,R=301]

在第二步中,我想从URI中删除 serv 文件夹 我有以下文件夹结构:

www.maindomain.com

  • SERV /
  • 主要网页的内容

要做到这一点,我有以下规则:

RewriteCond %{HTTP_HOST} ^serv.* [NC]
RewriteCond %{REQUEST_URI} !^/serv.* [NC]
RewriteRule ^(.*) /serv/$1 [L,QSA]

到目前为止这种方法有效,但我自己的重写规则与上述条件和规则相冲突:

RewriteEngine On
RewriteBase /
RewriteRule ^search/$ search.php [L,QSA]

所以我的URI有时会像 www.maindomain.de/search/search 那样。

这是我的完整htaccess文件:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www|serv)\.(.*\-.*)\.com [NC]
RewriteRule ^(.*) http://www.maindomain.com%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTP_HOST} ^serv.* [NC]
RewriteCond %{REQUEST_URI} !^/serv.* [NC]
RewriteRule ^(.*) /serv/$1 [L,QSA]

RewriteEngine On
RewriteBase /
RewriteRule ^search/$ search.php [L,QSA]

有什么问题?我没有发现错误。

此外,我想知道是否有可能,如果子域不是 serv 且URI不包含 serv ,则子域将被重定向到 WWW

1 个答案:

答案 0 :(得分:1)

  

如果可能,如果子域不是serv并且URI不包含serv,那么子域将被重定向到www

对于问题的最后一部分,请将以下内容添加到.htaccess文件

#if the subdomain is not serv
RewriteCond %{HTTP_HOST} !^serv\.[^\.]+\.de$ [NC]
#and the uri does not contain serv
RewriteCond %{REQUEST_URI} !^.*serv.*$ [NC]
#redirect to www
RewriteRule .* http://www.maindomain.de%{REQUEST_URI} [NC,L,R=301]

修改 我将%1引用替换为主机Above,您可以更改它以匹配您的实际主机。

对于问题的第一部分,下面的规则将匹配任何不以www开头的主机。或者服务。在域中没有破折号,即它将与www.maindomain.com匹配,因为它没有'-`。

RewriteCond %{HTTP_HOST} !^(www|serv)\.(.*\-.*)\.com [NC]

这将导致您观察到的无限重定向。

修复,请将其更改为以下

#if host is NOT www.anything.com or serv.anything.com
RewriteCond %{HTTP_HOST} !^(www|serv)\.[^\.]+\.com$ [NC]
#redirect to www.maindomain.com
RewriteRule .* http://www.maindomain.com%{REQUEST_URI} [L,R=301]