2015-11-02 66 views
1

是否可以通過保護單個網站的URL多個被手動更改?htaccess:保護手動重寫URL地址

實施例:

www.example.com/here-is-example-url/1234/page/ - 這是正確的URL

www.example.com/here-is-example - 壞URL(手動改變的) 或

www.example.com/here-is- - 壞URL(手動改變的) 或

www.example.com/here-is-example-2 - 不良網址(手動更改)

目前我確實將這些修改後的地址重定向到了主頁,最後RewriteRule,但我更願意看到一些解決方案來檢測URL的手動更改並阻止訪問這些訪問者。

什麼重寫規則RewriteCond會阻止這?

這裏是我到目前爲止有:

#redirect to canonical url if no ending slash 
RewriteRule ^([A-Za-z0-9-]+)/([0-9]+)/page$ $1/$2/page/ [R,L] 
#redirect to canonical url if anything behind slash 
RewriteRule ^([A-Za-z0-9-]+)/([0-9]+)/page/(.+)$ $1/$2/page/ [R,L] 
#rewrite to PHP file if visiting the canonical url 
RewriteRule ^([A-Za-z0-9-]+)/([0-9]+)/page/$ page.php?val1=$1&val2=$2 [L] 

#redirect to Homepage url if no other rule match with missing ending slash 
RewriteCond %{REQUEST_URI} !(/$|\.) 
RewriteRule (.*) http://www.domain.com/ [R,L] 

在這種情況下,不能被一些重寫規則來解決是有可能這樣的行爲重定向到500次訪問被拒絕?

+0

讓我們在這裏備份一下。它會使這些URL產生錯誤的目的是什麼? (是否有某些原因可以讓你特別*要*告訴這些用戶離開?) – duskwuff

+0

@duskwuff我想顯示500個訪問被拒絕給任何人,如果他們手動修改URL的話。因此,作爲最後一個條件和規則,如果缺少結束斜線,用戶將重定向到主頁 - 如何調整該條件和規則以使其[F,L] - 基於條件拒絕訪問而不是重定向到主頁? –

回答

0

可以使用˚F orbidden標誌

RewriteRule here-is-example$ - [F,L] 

正如你所說,以上規則只抓住了第一個例子。

大多數人不會看到HTTP狀態碼,您可以使用ErrorDocument來顯示自定義錯誤消息。

ErrorDocument 404 /access-denied.html 

https://httpd.apache.org/docs/2.4/custom-error.html

要小心,因爲沒有辦法知道是否有人有錯誤的URL由於剪切和粘貼錯誤或故意試探你的網站。

這不是你應該擔心的事情。

+0

那麼你的答案只能解決[這裏是例子]的情況下,所以沒有正確的正則表達式它只會爲這個例子,再加上它如何在多個頁面上工作(安全的方式)? –