是否可以请求带有 .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]
是否可以请求带有 .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]
您需要从 url 中排除 .php,否则您可能会陷入无限循环,并导致类似 .php.php.php.php 的 url。但这个想法很好,而且很有效。
如果请求的文件(重写后)存在,您的规则应该有效。例如页面/phpinfo被请求并且文件/phpinfo.php存在。但是如果文件(重写后)不存在,相同的规则将创建一个无限循环,例如:
/phpinfo匹配 RewriteRule 并且 RewriteCond 都满足,结果将是/phpinfo.phpL标志停止当前迭代,但由于文件名已更改,需要另一个迭代/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中设置为。将其更改为并重新启动 Apache。Nonehttpd.confAllowOverride FileInfo