当我尝试使用Apache服务器上的.htaccess文件从所有文件中删除PHP扩展名时,一切正常.扩展被删除,一切看起来都好多了.
但是,我有一个小问题:通常我进入诸如./nonexistent.php之类的页面时,会出现404错误.但是,当我重写URL并转到./不存在时,却收到500 Internal Server Error.
理想情况下,我只想将用户重定向到自定义的“找不到页面”页面,但是目前无法找到一种方法.
这是我正在使用的代码:
Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$$1.php
我尝试设置:ErrorDocument 500 / nope,但是,这似乎也没有效果.
因此,总而言之,有谁知道如何重写扩展名,同时保持默认状态下“未找到页面”系统的相同功能?
解决方法:
当使用上述重写条件请求不存在的文件时,您将遇到无限重定向.
如果访问http://yoursite.com/i-dont-exist,则第一个条件为true,i-dont-exist是不存在的文件,因此它将尝试重写为i-dont-exist.php,也不存在,因此重写模式会一直持续到Apache限制递归并给您500错误(本质上,它会不断地重写为i-dont-exist.php.php.php.php.php … php,直到您遇到500错误.
您可以通过添加其他检查来解决此问题,以确保在重写之前存在扩展名为.php的文件.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f #make sure $1.php exists before rewriting
RewriteRule ^(.*)$$1.php
如果file.php存在,它将被重写,否则不会被重写,并且将显示404错误页面.