我正在使用一些在apache2之前一直有效的重写指令,但现在尝试新的共享主机并且重写规则似乎没有得到应用。
我已将.htaccess文件缩减为以下基本规则:
RewriteEngine On
Rewritebase /demo/
RewriteRule ^(.*)$ index.php/$1 [L]
如您所见,我想从root用户的demo文件夹中重写每个请求到我的index.php文件。
因此http://www.example.com/demo/albums/show/1之类的所有内容都应由http://www.example.com/demo/index.php处理,以用于标准的MVC设置。 (我正在使用CodeIgniter btw)
上面的指令导致500错误,所以我想也许是因为1.3和2.x之间可能存在语法差异。
经过一些跟踪和错误编辑后,我发现重写规则本身有错,但我真的不明白为什么。
注意:mod_rewrite确实有用,我写了一个小测试以确定。
答案 0 :(得分:1)
在你的位置,我可能首先查看Apache错误日志,然后尝试通过执行来消除一个移动部件
RewriteEngine On
RewriteRule ^/demo/index.php$ /demo/index.php [L]
RewriteRule ^/demo/(.*)$ /demo/index.php/$1 [L]
如果有效,我会尝试重新引入RewriteBase。
答案 1 :(得分:1)
你有没有设置:
Options +FollowSymLinks
...在重写规则之前?如果FollowSymLinks
被禁用,mod_rewrite将无效。
答案 2 :(得分:1)
由于index.php/…
也与^(.*)$
匹配,因此您可能会遇到无限递归。因此,请尝试排除目标:
RewriteCond $1 !^index\.php/
RewriteRule ^(.*)$ index.php/$1 [L]