.htaccess 重定向不';我不能正常工作

.htaccess 重定向不';我不能正常工作,.htaccess,mod-rewrite,url-rewriting,.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

我有一个小的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

如果可能,如果子域不是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引用,您可以更改它以匹配您的实际主机

对于问题的第一部分,您下面的规则将匹配任何不以www.或serv开头的主机。域中没有破折号,即它将匹配
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]

你的规则似乎不起作用。无法解析引用%1。如果我直接调用maindomain,我会得到一个错误,即重定向太多。再试一次,www.result进入无限循环。从works重定向。很抱歉-我输入了一个错误,忘记逃出上面固定的句点
[^\.]