2013-10-24 85 views
2

我怎样才能让我的htaccess规则返回404时,无效的网址输入到地址栏。htaccess需要时返回500错误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不匹配的重写,如'测试/烹饪/ 9/1/1 ,提交/ 0/0/0',我希望它返回404如果规则概述以上是不是匹配。

FULL .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> 
+0

这两个规则不会导致错误,你有其他规则? –

+0

是的,我会发布我的完整文件 – PEPLOVE

+0

500是服务器错误。如果服务器遇到错误,那么它不能返回404响应。您需要修复错误,这可能不在这些行中。 – 2013-10-24 20:13:11

回答

3

这是发生因为Apache是​​读取URI作为PATH INFO的一部分,和testsubmit份匹配-f检查eventhough的路径的其余部分没有。尝试改变-f检查:的

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

代替:

RewriteCond %{REQUEST_FILENAME}\.php -f 
+0

谢谢,这就是它。我能问一下,你花了多少时间才能熟练掌握apache,我永远无法理解它,或者记住它。 – PEPLOVE

+1

+1答案。 – anubhava

+1

@PEPLOVE我实际上通过回答SO的问题来了解它,我甚至不使用mod_rewrite。 –