.htaccess通配符子域

时间:2009-06-29 17:20:45

标签: .htaccess

我正在尝试使用.htaccess和通配符子域实​​现解决方案,以便

http://subdomain.example.com已映射到http://example.com/index.php/accounts/subdomain/。我的规则看起来像:

RewriteCond %{HTTP_HOST} !www.example.com [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).example.com [NC]
RewriteRule ^(.*/) /index.php [PT,L]

哪个有效,但无视其他一切。当我尝试在规则中添加任何内容时,例如:

RewriteRule ^(.*/) /index.php/hello [PT,L]

我收到500内部服务器错误。我如何使这个工作?

3 个答案:

答案 0 :(得分:3)

您可能需要从规则中排除index.php

RewriteCond %{HTTP_HOST} !^www\.example\.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+)\.example\.com$ [NC]
RewriteRule !^index\.php($|/) index.php/accounts/%2%{REQUEST_URI} [PT,L]

答案 1 :(得分:1)

尝试将RewriteRule更改为

RewriteRule ^/(.*)$ /index.php/accounts/%1/$1 [PT]

这会将URL重写为包含子域和原始请求URI的URL。

编辑:也许它需要

RewriteRule ^(.*)$ /index.php/accounts/%1/$1 [PT]

如评论中所述。

答案 2 :(得分:1)

这是我用于在我自己的网站上重定向子域的代码的改编。我没有声称它是最佳实践,但它有效;

RewriteCond %{HTTP_HOST} ^(.*)\.com$ [NC]
RewriteCond %1 !^(www)\.example$ [NC]
RewriteRule ^.*$ http://www.example.com/index.php/accounts/%1/ [R=301,L]