tra*_*nte 0 apache .htaccess cakephp no-www cakephp-2.0
我知道htaccess重定向存在太多问题,但我找不到确切的解决方案.如果存在匹配的问题,我很抱歉.
在我的公共html(webroot)文件夹中有以下htaccess文件:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
然后,为了将带有"www"的URL重定向到"非www",我添加了两行.文件变成这样:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
问题是, www.example.com 重定向到example.com 但 www.example.com/mycontroller/未重定向到example.com/mycontroller/
我怎么解决这个问题?
第一个RewriteRule会将没有实际物理文件/文件夹的每个URL重写到index.php页面,但是如果匹配,它会将其视为最后一条规则并停止处理所有其他规则([L]旗).因此,当您仅使用根路径调用时,它不会被触发并继续执行您的www重写规则,但任何其他逻辑URL都会触发第一次重写并停止.
只需更改规则的顺序,将RewriteCond/RewriteRule对放在默认值之前.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
如果您将其作为虚拟主机运行并且可以访问Apache的配置文件,请考虑将规则放在Apache的虚拟主机配置文件中,以避免在更新Cake版本时被覆盖,或者确保以其他方式保护您的更改.
| 归档时间: |
|
| 查看次数: |
1167 次 |
| 最近记录: |