我目前正在使用此代码删除我的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?
提前谢谢。
答案 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错误是个坏主意。你应该修正错误,而不是覆盖它。