【发布时间】:2013-10-24 20:10:02
【问题描述】:
当在地址栏中输入无效的 url 时,如何使我的 htaccess 规则返回 404。
导致这种情况的两个规则
RewriteRule ^submit/([a-z]+)/([0-9]+)$ /submit?c=$1&i=$2 [L]
RewriteRule ^test/([a-z]+)/([0-9]+)/([0-9]+)$ /test?c=$1&i=$2&q=$3 [L]
当输入正确的 url 时,这两个规则都可以正常工作,但例如最后一个参数不是数字,它会返回 500 错误。
我怎样才能做到,如果这些规则不匹配,那么它将返回 404。
为了进一步澄清采取以下网址test/cooking/9/1 是有效的。 submit/cooking/9 也是如此。
它返回 500 的 url 与重写不匹配,例如“test/cooking/9/1/1,submit/0/0/0”,如果规则我希望它返回 404上面概述的不匹配。
完整的 .htaccess 文件
# Turn on rewriting engine
RewriteEngine On
# Internally rewrite submit parameters
RewriteRule ^submit/([a-z]+)/([0-9]+)$ /submit?c=$1&i=$2 [L]
# Internally rewrite test parameters
RewriteRule ^test/([a-z]+)/([0-9]+)/([0-9]+)$ /test?c=$1&i=$2&q=$3 [L]
# Internally rewrite .php
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^/?(.*)$ /$1.php [L]
# Externally redirect .php
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.php
RewriteRule ^/?(.*)\.php$ /$1 [L,R=301]
# Add default charset for files
AddDefaultCharset UTF-8
# G-zip deflate compression
<FilesMatch "\\.(js|css|html|htm|php|xml)$">
SetOutputFilter DEFLATE
</FilesMatch>
【问题讨论】:
-
这两个规则没有导致错误,您还有其他规则吗?
-
是的,我会发布我的完整文件
-
500 是服务器错误。如果服务器遇到错误,则它无法返回 404 响应。您需要修复错误,可能不在这些行中。
-
@MikeW,是的,我明白,但我不知道错误在哪里,apache 不是我的强项
-
看看error log。
标签: .htaccess http-headers http-status-code-404