PHP-Mod_Rewrite扩展删除功能更改404的功能

当我尝试使用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错误页面.

上一篇:PHP-编码SEO友好URL的最有效方法?


下一篇:php-查询字符串的htaccess问题