- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
当我尝试使用 Apache 服务器上的 .htaccess 文件从所有文件中删除 PHP 扩展时,一切正常。扩展名已删除,一切看起来都好多了。
但是,我遇到了一个小问题:当我通常转到诸如 ./nonexistent.php
之类的页面时,我会收到 404 错误。但是,当我重写我的 URL 并转到 ./nonexistent
时,我反而得到了一个 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
,第一个条件是评估为真,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 - Mod_Rewrite 扩展移除改变了 404 的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9864473/
我正在做一个项目,我的 android 在这个项目中作为一个网络服务器工作;输入带端口号的 IP 地址,打开 Web 界面,用户可以将文件上传到手机。我想在 Web 界面上显示一些图片,以便我们的界面
我是一名优秀的程序员,十分优秀!