如果请求的文件(重写后)存在,您的规则应该有效。例如页面/phpinfo
被请求并且文件/phpinfo.php
存在。但是如果文件(重写后)不存在,相同的规则将创建一个无限循环,例如:
/phpinfo
匹配 RewriteRule 并且 RewriteCond 都满足,结果将是/phpinfo.php
L
标志停止当前迭代,但由于文件名已更改,需要另一个迭代
/phpinfo.php
匹配 RewriteRule 并且 RewriteCond 都满足,结果将是/phpinfo.php.php
- 重复直到 mod_rewrite 放弃
解决方法很少,最简单的一种是调整您的RewriteCond
:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*) $1.php [QSA,L]
如果即使对于简单的重写规则,您也不断收到 404 错误,则很可能您的重写规则没有被 Apache 处理。一个可能的原因是它在服务器配置文件 ( )AllowOverride
中设置为。将其更改为并重新启动 Apache。None
httpd.conf
AllowOverride FileInfo