没有PHP扩展的Apache请求页面

时间:2012-06-28 09:10:25

标签: php apache .htaccess mod-rewrite url-rewriting

是否可以请求带有.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]

2 个答案:

答案 0 :(得分:2)

你需要从网址中排除.php,因为否则你会得到一个无限循环,它会产生一个像这样的网址.php.php.php.php。但这个想法很好,而且很有效。

  1. How do I remove the '.php' extension from URLs?

答案 1 :(得分: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在服务器配置文件(None)中设置为httpd.conf。将其更改为AllowOverride FileInfo并重新启动Apache。