2010-08-16 155 views
0

我讨厌问关于mod_rewrite的问题,但我似乎无法得到这些规则正常工作。我曾设置并想出了一次之前,但几年过去了,现在它只是不好玩,我的mod_rewrite的知识回到呃......动态子域名+定义的子域名通过htaccess

本质上是我想要做的是强制www在主域名example.com上。 (或迫使没有www会更好,但我没有远程能够得到与动态子域一起正常工作)。

如果my.example.com规则的存在,然后按照它们进行相应

为别的,即:* .example.com的,传递给另一个文件来分析。

我目前处理的规则强制www,并正确处理动态子域,但完全忽略my.example.com规则,将其作为通配符子域处理。看来我可以让我的任何规则正常工作,但是当试图让他们一起工作时,这只是一个混蛋。如果有人知道必须让这个工作正常,这将是超级赞赏。

Options +FollowSymLinks 
RewriteEngine On 
RewriteBase/

# force www on main, force no www would be better. 
RewriteCond %{HTTP_HOST} !^(.*)\.example.com$ [NC] 
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L] 

# my.example.com defined subdomain 
RewriteCond %{HTTP_HOST} !^my\.example\.com$ [NC] 
RewriteRule ^.*$ - [S=3] 
RewriteRule ^$ /mydirectory/index.php [L] 
RewriteRule ^category/([^/]+)/?$ /mydirectory/index.php?category=$1 [L] 
RewriteRule ^submit/?$ /mydirectory/process.php [L] 

# *.example.com 
RewriteCond %{HTTP_HOST} ^(.*)\.com$ [NC] 
RewriteCond %1 !^(www)\.examples$ [NC] 
RewriteRule ^([^/]+)/?$ /subdomainparse/index.php?subdomain=%1&fakedirectory=$1 [L] 
+0

嗯...似乎在我的测试服务器上正常工作。 “我的”实际上是“我的”,还是其他的东西? – 2010-08-16 20:52:58

回答

2

尝试下列规则:

# remove www on main 
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC] 
RewriteRule ^(.*)$ http://example.com/$1 [R=301,L] 

# my.example.com defined subdomain 
RewriteCond %{HTTP_HOST} !^my\.example\.com$ [NC] 
RewriteRule ^.*$ - [S=3] 
RewriteRule ^$ /mydirectory/index.php [L] 
RewriteRule ^category/([^/]+)/?$ /mydirectory/index.php?category=$1 [L] 
RewriteRule ^submit/?$ /mydirectory/process.php [L] 

# *.example.com 
RewriteCond %{HTTP_HOST} ^(.*)\.example\.com$ [NC] 
RewriteCond %1 !^www$ [NC] 
RewriteRule ^([^/]+)/?$ /subdomainparse/index.php?subdomain=%1&fakedirectory=$1 [L] 

的第一条规则现在将重定向+ www.example.com *至example.com。第三条规则将捕获任何请求给一个不存在的主机。

+1

这似乎是完美的工作。在Tim的评论之后,我再次清除了我的缓存,并且我的原始规则开始工作,所以像往常一样,这主要是我的用户错误,但我很乐意让no-www工作,非常感谢Gumbo! – Jervis 2010-08-16 21:18:06