我正在尝试使用.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内部服务器错误。我如何使这个工作?
答案 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]