2011-09-21 59 views
0

我注意到在Drupal中,如果你添加.php到任何頁面的url欄,它會給你一條404條消息;啓用乾淨的網址。該頁面顯然是一個.php文件,但是.htaccess會阻止用戶在url欄中篡改URL擴展名。你怎麼能用.htaccess來做到這一點。目前我省略了文件擴展名,但也想添加該功能。謝謝。
此外,這個問題不涉及Drupal。我只提到了Drupal的例子。如何設置.htaccess以顯示404不允許的URL?

+3

我將重新表述:如何防止用戶編寫不存在的URL?你知道答案。 –

+0

@OZ_閱讀題體通常有助於理解這個問題。 –

+1

Drupal URLs不指向物理PHP文件,它們是重定向到處理請求的'index.php'的虛擬URL。因此,在URL中添加'.php'將會給404,因爲該URL根本不存在。 –

回答

0

我不知道Drupal,但在通常的PHP應用程序中,每個請求都被路由到前端控制器,後者執行一些驗證並在出錯時引發404。
easy-peasy

2

只是因爲一個文件包含PHP代碼並不意味着它必須有.php擴展;當你通過互聯網訪問文件時更是如此。

當你請求http://mysite.com/page和你使用的是.htaccess像Drupal的,該請求被轉發到index.php?q=page於是Drupal將檢查它的匹配page路徑數據庫。如果它找到一個,它會顯示該頁面的內容,如果沒有,它會(正確)給出一個404.

如果您希望所有頁面都可以通過PHP擴展訪問,您可以在您的.htaccess文件從何處PHP文件不實際的任何請求刪除.php存在:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)\.php $1 [NC] 

請記住,雖然這增加了對您網站的訪問者零額外的價值(事實上,他們必須記住文件擴展名的以及頁面的路徑),並且它公開了正在使用的服務器端技術,因此潛在的攻擊者可能會爲他完成一些工作。

希望有所幫助。

1

請問您能否更深入地解釋一下。它如何將內容重定向到現有頁面?這是常見的做法/典型的做事方式?

是的,這是一個非常普遍的做法,大多數框架和CMS都使用它。

原理很簡單:您設置您的.htaccess,以便每個與實際文件或目錄不匹配的請求都將被重定向到前端控制器,通常是應用程序根目錄中的index.php。該前端控制器通過分析URL並調用必要的操作來處理請求。

通過這種方式,您可以將重寫規則最小化爲一個,並且您可以提供自定義的404頁面。