使用.htaccess将每个URL重写为index.php

时间:2011-12-11 13:10:00

标签: apache .htaccess mod-rewrite

我正在尝试捕获每个URL并将其重写为index.php。我现在在.htaccess中有以下代码:

RewriteEngine on
RewriteRule .* index.php

它会重写每个URL,但我总是得到404说无法找到index.php文件。它正在寻找文件的路径是正确的。我在这里做错了什么?


更新1

当我直接浏览到index.php时,它会正确显示该文件。很奇怪。


更新2

我在httpd.conf中打开了mod_rewrite的日志记录:

RewriteLog /var/log/apache2/rewrite.log
RewriteLevel 3

这是它记录的内容:

strip per-dir prefix: /Users/rits/Sites/test/ -> 
applying pattern '.*' to uri ''
rewrite '' -> 'index.php'
add per-dir prefix: index.php -> /Users/rits/Sites/test/index.php
internal redirect with /Users/rits/Sites/test/index.php [INTERNAL REDIRECT]

4 个答案:

答案 0 :(得分:1)

我很确定这是因为它试图无限地将index.php重写为index.php

请尝试以下方法:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !index\.php
RewriteRule .* index.php

这应该可以防止重写自己,并希望能解决你的问题。

答案 1 :(得分:0)

试试这个:

RewriteEngine on
RewriteRule ^(.*)$ http://www.yourwebpage.com/$1 [L,R=301]

答案 2 :(得分:0)

这是我设置的一个网站上的.htaccess,我将其设置为将所有内容重定向到索引页面,如果你想尝试的话,它对我有用:

RewriteEngine on
RewriteOptions MaxRedirects=10
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !index\.php
RewriteRule ^.*$ http://www.mywebpage.com/ [R=301,L]

答案 3 :(得分:0)

这是我拥有的.htaccess文件的内容并且有效:

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