htaccess非www。到www重定向并请求重写到index.php

时间:2012-01-16 20:37:23

标签: .htaccess

尝试同时组合两个htaccess RewriteRules:

1)将所有非www URL转换为www
2)将所有请求发送到index.php

Number 2适用于生产中的以下设置:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [QSA]

但与

结合使用时
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L,NC]

网址的行为与使用www网址时的行为相同,但与非网址一起使用时很有趣。

E.g。 http://mydomain.com/customername/admin/signin成为
http://www.mydomain.com/index.php/admin/signin?/customername/admin/signin

虽然URL应该保持不变而不刷新,并且参数“/ customername / admin / signin”应该传递给index.php ......

有关如何实现这一目标的任何提示?我希望mydomain.com之后的URL保持不变(正如我的解决方案目前所做的那样)但是添加了www。在网址前面。

1 个答案:

答案 0 :(得分:3)

看起来你只需要在全面重写之前添加HTTP_HOST检查到index.php。

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

任何URI被重写为catch-all之前,重定向到www ,然后:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [QSA]

在非www获取301重定向到www域之后发生的所有事情。