2012-03-28 39 views
3

作爲一個供參考,我使用以下.htaccess文件在位於www.site.com/content/htaccess的mod_rewrite的不會跳過與[S]

當用戶訪問www.site.com/content/ 登錄重寫規則我希望它顯示從www.site.com/content/ userlogin.php內容(通過改寫掩蓋,而不是重定向) - 這是我已經成功完成,像這樣:

RewriteEngine On 
RewriteBase /content/ 
RewriteRule ^login/?$ /content/userlogin.php [NC,L] 


然而,我希望添加以下內容:如果他們嘗試訪問www.site.com/conten T/userlogin.php直接,我想/他們重定向到一個404頁的www.site.com/content/ 錯誤404.php

RewriteEngine On 
RewriteBase /content/ 
RewriteRule ^login/?$ /content/userlogin.php [NC,S=1,L] 
RewriteRule ^userlogin\.php$ /content/error/404.php [NC,L] 


與在.htaccess文件,既www.site.com/content/ 登錄和www.site.com/content/ userlogin.php顯示www.site.com/content/ 錯誤/ 404.php

回答

2

首先在S = 1將不起作用,因爲L指令將進行任何進一步的重寫最佳。 看起來第一個RewriteRule讓Apache再次通過.htaccess規則,所以你需要知道第一次重寫是否已經發生。

RewriteRule ^login/?$ /content/userlogin.php [E=DONE:true,NC,L] 

所以當下次重定向發生的環境變量實際上被改寫爲REDIRECT_<variable>,你可以在這一個這樣做的RewriteCond:

RewriteCond %{ENV:REDIRECT_DONE} !true 
RewriteRule ^userlogin\.php$ /content/error/404.php [NC,L] 
你可以通過設置這樣一個環境變量做到這一點

希望這有助於

+0

這和你寫的完全一樣,謝謝。然而,根據我的具體應用,我遇到了一系列新問題,所以我會在我承認失敗之前嘗試弄清楚。乾杯! (來自一個名叫比約恩的傢伙) – iverSUN 2012-03-29 18:20:08

0

使用%{THE_REQUEST}變量在你的代碼,而不是:

RewriteEngine On 
RewriteBase /content/ 

RewriteRule ^login/?$ content/userlogin.php [NC,L] 

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+userlogin\.php[\s\?] [NC] 
RewriteRule^content/error/404.php [L]