2013-02-10 86 views
0

我的.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

回答

1

首先,你的方法應縮短爲:

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

這種探針的PHP文件的存在,不是沒有它的基本名稱的。

由於這是[LAST]規則,然後才能(或者可能是重寫規則/塊的RewriteCond之前)探頭已經存在的.PHP後綴:

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

...或發出在這種情況下重定向。

0

嘗試

<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