我有一个静态网站构建,使用分布在一个小目录结构周围的.php文件。
我使用以下重写来公开我的页面,而无需.php扩展名:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) $1.php [L]
这有效,但是当我请求不存在的页面时,服务器返回 500 错误而不是 404。 我不明白为什么。
我想将丢失页面的请求发送到文档根目录中名为 404.php 并仅显示为"404"的文件,但要做到这一点,我首先需要服务器正确返回 404 错误,而不是 500。
这是因为您正在重写网站上不存在的所有内容以$1.php
。
在重写请求之前,您需要检查 uri 是否以 php 文件的形式存在.
尝试
RewriteEngine on
#if the uri.php exists
RewriteCond %{REQUEST_FILENAME}.php -f
# rewrite the uri
RewriteRule ^(.+)/?$ $1.php [L]