当我尝试使用我的Apache服务器上的.htaccess文件从我的所有文件中删除我的PHP扩展时,一切都很好。删除了扩展,一切看起来都好多了。
但是,我遇到一个小问题:当我通常会转到./nonexistent.php
等页面时,我会收到404错误。但是,当我重写我的网址时,我转到./nonexistent
,而是获得了500 Internal Server Error
。
理想情况下,我想简单地将用户重定向到自定义的“找不到页面”页面,但我目前无法找到实现此目的的方法。
这是我正在使用的代码:
Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ $1.php
我已尝试设置:ErrorDocument 500 /nope
,但是,这似乎也没有效果。
因此,总而言之,是否有人知道如何重写扩展,同时保持默认的'Page Not Found'系统的相同功能?
答案 0 :(得分:2)
当您使用上述重写条件请求不存在的文件时,您将遇到无限重定向。
如果你访问http://yoursite.com/i-dont-exist
,第一个条件是评估为真,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错误页面。
答案 1 :(得分:1)