是否可以请求带有.php扩展名的文件,例如,用户只需输入http://example.com/about.php
,而不是去http://example.com/about
。
我尝试了以下内容,但只获得了404页,
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.php [L,QSA]
答案 0 :(得分:2)
你需要从网址中排除.php,因为否则你会得到一个无限循环,它会产生一个像这样的网址.php.php.php.php。但这个想法很好,而且很有效。
答案 1 :(得分:1)
如果所请求的文件(重写后)存在,您的规则应该有效。例如,请求了页面/phpinfo
,文件/phpinfo.php
存在。但是,如果文件(重写后)不存在,相同的规则将创建无限循环,例如:
/phpinfo
与RewriteRule匹配且两个RewriteCond都已满足,结果将为/phpinfo.php
L
标志停止当前迭代,但由于文件名已更改,因此需要进行另一次迭代/phpinfo.php
与RewriteRule匹配且两个RewriteCond都已满足,结果将为/phpinfo.php.php
解决方法很少,最简单的方法是调整RewriteCond
:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*) $1.php [QSA,L]
如果连续简单的重写规则不断出现404错误,那么Apache的处理重写规则很可能。可能的原因是AllowOverride
在服务器配置文件(None
)中设置为httpd.conf
。将其更改为AllowOverride FileInfo
并重新启动Apache。