当需要404时,htaccess返回500错误

时间:2013-10-24 20:10:03

标签: .htaccess http-headers http-status-code-404

如何将无效网址输入地址栏时,我的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]

当输入正确的网址时,这两个规则都可以正常运行,但比如说最后一个参数之一不是数字,它会返回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>

1 个答案:

答案 0 :(得分:3)

这种情况正在发生,因为apache正在读取URI作为PATH INFO的一部分,testsubmit的部分匹配-f检查事件,而其余的路径都没有'吨。尝试将-f检查更改为:

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI}\.php -f

而不是:

RewriteCond %{REQUEST_FILENAME}\.php -f