1

我目前正在使用此代码在我的 apache Web 服务器上删除我的文件的 .php 扩展名。

Options -Multiviews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f    
RewriteCond %{REQUEST_FILENAME} !-d   
RewriteRule ^(.*)$ $1.php [L]

两个问题:

1:当有人请求一个不存在的页面时,我的 Web 服务器返回 500 错误而不是 404。我该如何解决这个问题?

2:如果有人请求 .php 扩展名,我该如何强制执行 404?

先感谢您。

4

3 回答 3

1

不存在页面的 500 错误正在发生,因为 mod_rewrite 进入无限循环,试图重写您的请求并最终终止。

像这样重写规则以确保具有 PHP 扩展名的文件确实存在:

Options -Multiviews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f    
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php [L]

仅当“file.php”存在时,该RewriteCond %{REQUEST_FILENAME}.php -f行才会导致重写发生。

于 2013-02-28T19:04:31.643 回答
0

example.com/about-us.php 转到 example.com/about-us.html

RewriteEngine on
RewriteRule ^(.*)\.html$ $1.php
于 2013-02-28T18:22:54.677 回答
0

这不是完整的答案。

如果您不完全了解 htaccess 功能,我将尝试解释 RewriteEngine 的工作原理。

Apache 服务器从您的浏览器“接收”一些“不真实”的 URL。然后它读取 .htaccess,并通过使用该文件中的信息将“非真实”url 转换为指向服务器上物理文件的“真实”url。

错误详细信息始终保存到 apache (httpd) 错误日志中。您必须阅读它,如果它没有告诉您任何信息 - 将其粘贴到此处 - 我们将提供帮助。

在这种情况下,强制 404 错误是个坏主意。您应该修复错误,而不是覆盖它。

于 2013-02-28T18:51:20.987 回答