我有一个小的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
要做到这一点,我有以下规则:
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
答案 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]