2011-07-12 46 views
3

我目前通過使用mod_rewrite使所有的頁面在沒有.php擴展名的情況下工作。如:如果在URL中請求.php擴展名,則重定向到404

www.mywebsite.com/noextension 

不過,我將如何去我的用戶重定向到404頁,如果他們決定到PHP擴展添加到這樣的網址是什麼?

www.mywebsite.com/noextension.php 

我的htaccess看起來像這樣至今:

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^([a-zA-Z0-9]+)(/)?$ $1.php 
RewriteRule ^forums/([a-zA-Z0-9]+)(/)?$ forums.php?category=$1 [NC] 

我已經試過但這樣的事情,因爲這RewriteRule \.php$ - [R=404],它只是404的每一個網頁,我去。我想我可能不得不使用像REQUEST_URI這樣的東西來完成我所要求的。

你們建議我補充些什麼?謝謝。

+0

什麼Apache的版本你有? – LazyOne

+0

我有版本2.2.19 – SineCosine

回答

8

嘗試這些線(位置高於你已經):

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
RewriteRule ^(.+)\.php - [F,L] 

此規則將阻止(403錯誤),以任何PHP文件直接訪問(但會軌跡槽已經重寫的URL,當規則變到下一次迭代)。

TBH我不是100%肯定它會工作(這取決於你的Apache配置)......但考慮到你有v2.2.x它應該(它在我的2.2.17上正常工作)。


UPDATE: 對於「它踢我的網站主頁無/索引404」之前加上這一行上面的規則:

RewriteRule ^$ /index.php [QSA,L] 
+0

輝煌的伴侶,但它踢我的網站主頁沒有/索引到404. – SineCosine

+0

我必須說你知道你的HTACCESS。非常感謝你。 – SineCosine

+1

@SineCosine查看我更新的答案。請測試您的所有網址。上述規則不幸**在訪問目錄(例如'http:// www.example.com/somefolder /'=>'/ somefolder/index.php')時會阻止所有索引文件(用'DirectoryIndex'指令聲明) )這樣自動插入的index.php將被視爲該規則的直接訪問。 – LazyOne

相關問題