返回404,如果被请求

问题描述:

我的.htaccess文件看起来像这样.PHP为了使我的网址从/something.php到/东西:返回404,如果被请求

Options -Multiviews 
RewriteEngine On 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ $1.php [L]   

当请求的PHP扩展,它仍然有效。如果请求.php扩展名,我怎样才能返回404?谢谢。

+0

请再解释和更多的单词,你正在尝试什么。使用一个例子。 – mario 2013-02-10 20:05:55

+0

我想要它返回一个404错误,如果有人在URL中输入.php文件扩展名。因为我提供的代码会删除.php扩展名,但仍然允许用户输入。 – Zach 2013-02-10 20:09:31

+0

您实际上想要返回HTTP/1.1 404 Not Found或仅重定向到您的自定义404页面? – brezanac 2013-02-10 20:32:46

首先,你的方法应缩短为:

RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^(.*)$ $1.php [L]  

这种探针的PHP文件的存在,不是没有它的基本名称的。

由于这是[LAST]规则,然后才能(或者可能是重写规则/块的RewriteCond之前)探头已经存在的.PHP后缀:

RewriteRule ^(.*)\.php$ - [F] 

...或发出在这种情况下重定向。

尝试

<FilesMatch "\.(php)$"> 
     RewriteRule ^(.*)$ /404.html [L,S] 
    </FilesMatch> 
+0

如果您使用超出范围300-399的响应代码值,您将基本上销毁重写链,这就是您不想这样做的原因(http://httpd.apache.org/docs/ current/rewrite/flags.html#flag_r) 这里可能不是一个大问题,但在更复杂的规则中,它肯定会造成一些头痛。 – brezanac 2013-02-10 20:39:47

+0

@holodoc感谢您的通知 – 2013-02-10 21:12:49