0

是否可以请求带有 .php 扩展名的文件,例如,http://example.com/about.php用户无需访问,只需键入.php 即可http://example.com/about

我已经尝试了以下但只是得到一个 404 页面,

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

4

2 回答 2

2

您需要从 url 中排除 .php,否则您可能会陷入无限循环,并导致类似 .php.php.php.php 的 url。但这个想法很好,而且很有效。

  1. 如何从 URL 中删除“.php”扩展名?
于 2012-06-28T09:16:10.203 回答
1

如果请求的文件(重写后)存在,您的规则应该有效。例如页面/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。Nonehttpd.confAllowOverride FileInfo

于 2012-06-28T11:46:12.330 回答