用于处理子域和删除www的regex

用于处理子域和删除www的regex,regex,mod-rewrite,Regex,Mod Rewrite,下面是我的工作(删除www),但我注意到开始弄乱一个子域,因为它不够具体 RewriteCond %{HTTP_HOST} !^site.com$ [NC] RewriteRule ^(.*)$ http://site.com/$1 [R,L] 所以我补充说 RewriteCond %{HTTP_HOST} !^hotels$ [NC] RewriteRule ^(.*)$ http://hotels.site.com/$1 [R,L] 显然不正确(第二部分根本不需要)-然后

下面是我的工作(删除www),但我注意到开始弄乱一个子域,因为它不够具体

RewriteCond %{HTTP_HOST} !^site.com$ [NC]
RewriteRule ^(.*)$ http://site.com/$1 [R,L]
所以我补充说

    RewriteCond %{HTTP_HOST} !^hotels$ [NC]
    RewriteRule ^(.*)$ http://hotels.site.com/$1 [R,L]
显然不正确(第二部分根本不需要)-然后我明白我需要在第一部分中避开url中的点(句点),但现在它更具体了,它不需要与www.hotels.site.com匹配-在这种情况下,我仍然想删除www,但我想重定向到子域。所以简而言之,我总是想删除www并保持子域工作

RewriteCond %{HTTP_HOST} !^www\.site\.com$ [NC]
所以最后一行非常具体,应该只匹配www.site.com


那为什么不呢?

^www.site.com$
只会精确匹配
www.site.com

^hotels$
只会精确匹配
hotels
——也许你的意思是
^hotels
,它匹配以
hotels
开头的任何东西

我发现您的需求很难理解,但是如果您只想删除
www
,您可以使用

RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule ^.*$ http://%1/$0 [R,L]

我认为美元总是用来表示你想要比赛的结束。我尝试了你的解决方案,但万维网没有被剥离,尽管它看起来应该可以工作。匹配“www.”然后重定向到%1,这是www.@登陆后的任何内容。请尝试将
RewriteRule
更改为
RewriteRule^.*$http://%1$0[R,L]
,或者如果这不起作用,请尝试
RewriteCond%{http\u HOST}^www\(.+)[NC]RewriteRule^ http://%1%{REQUEST\u URI}[L,R]
。不幸的是,我现在无法测试。