尝试同时组合两个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。在网址前面。
答案 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域之后发生的所有事情。