2011-10-17 38 views
0

首先,我是一個初學PHP和.htaccess。這是我的困境...如何禁用不需要的請求? (MySQL,.htaccess,PHP)

我已經建立了動態​​頁面,並使用htaccess來重寫URL。有3種類型的網頁...例子:

國家:example.com/massachusetts-colleges.html

市:example.com/massachusetts-colleges/boston-ma-colleges.html

學院:example.com/massachusetts-colleges/boston-ma-colleges/harvard.html

的問題是,被請求的頁面(從舊的鏈接結構可能)不應該如存在:

example.com/boston-ma-colleges.html

狀態URL存儲在數據庫中(stateSlug =馬薩諸塞大學)一個位置表。城市網址也存儲在數據庫中的位置表中,並且相應的狀態段落也與該城市(citySlug = boston-ma-colleges和stateSlug =馬薩諸塞大學)一起存儲。學院存儲在不同的表格中,並使用ID來與城市相對應。

如何使用.htaccess阻止訪問任何「OTHER」網址(頁面顯示模板和無數據),並顯示404頁面(或重定向到主頁)?

這是我的.htaccess文件看起來像現在:

RewriteEngine on 
RewriteRule ^([^/\.]+)\.html?$ php/statePage.php?stateSlug=$1 [L] 
RewriteRule ^([^/\.]+)-colleges/([^/\.]+)\.html?$ php/cityPage.php?citySlug=$2&stateSlug=$1 [L] 
RewriteRule ^([^/\.]+)-colleges/([^/\.]+)/([^/\.]+)\.html?$ php/collegePage.php?collegeSlug=$3&citySlug=$2&stateSlug=$1 [L] 

同樣,我有點新的htaccess的和PHP語言。我希望在這個問題上有任何幫助。

謝謝!

回答

0

嘗試以下,但你的404頁面替換index.php

Order allow,deny 
Allow from all 
RewriteEngine On 

RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?/$l [L] 

這應該重定向均未發現index.php或您選擇的腳本文件,404頁例如,所有的文件和目錄的請求。請記住將標題設置爲404響應代碼。

我在http://codeigniter.com/wiki/mod_rewrite/

得到這個從CodeIgniter的wiki頁面他們的維基頁面是非常有益的,當我試圖來解決類似的問題。

1

假設所有的內容都是由上述URL之一匹配,你可以簡單地禁止訪問一切通過添加另一條規則到最後:

RewriteRule ^(.*)$ - [F] 

爲了避免請求搞亂你的圖像和CSS ,你應該增加:

RewriteCond %{REQUEST_FILENAME} !\.(jpg|png|gif|js|css)$ [NC] 
RewriteRule ^(.*)$ - [F] 

如果有,應使不可訪問的目錄,放置在的.htaccess他們只有以下:

Order deny,allow 
deny from all 
+0

我只是試圖添加你告訴我,並在應該顯示的頁面上導致「禁止」... – NotJay

0

將所有公開文件重寫爲虛假目錄/allow/..,對於/allow/..目錄中未包含的任何請求,顯示404。最後將文件從/allow/..重寫到真實目錄。

這是一個很好的解決方法IMO :)比在每個目錄中使用deny all更好...

+0

謝謝......我結束了搞清楚這是不是在htaccess ...我使用頁面代碼來檢查數據庫中的slu and,並將標題更改爲404(如果不存在)。 – NotJay