如果页面不存在,htaccess会导致500

时间:2013-02-28 18:10:54

标签: php .htaccess

我目前正在使用此代码删除我的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?

提前谢谢。

3 个答案:

答案 0 :(得分: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]

RewriteCond %{REQUEST_FILENAME}.php -f行只会在" file.php"存在。

答案 1 :(得分:0)

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

RewriteEngine on
RewriteRule ^(.*)\.html$ $1.php

答案 2 :(得分:0)

这不是完整的答案。

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

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

错误详细信息始终保存到apache(httpd)错误日志中。你必须阅读它,如果它没有告诉你什么 - 粘贴在这里 - 我们会帮助。

在这种情况下,

强制404错误是个坏主意。你应该修正错误,而不是覆盖它。