2013-10-18 86 views
1

我有這種情況:
/sport.html所有URL隱藏真實的URL /archive.php?action=search&section=sport如何防止htaccess上的無限重定向循環?

#This is the RULE: 
RewriteRule ^([a-zA-Z_]+([a-zA-Z0-9_]+)?)(-([0-9]+))?\.html$ /archive.php?action=search&section=$1 [L] 

現在我想隱藏真實的URL和所有直達archive.php的頁面,但我收到重定向循環錯誤與此規則:

RewriteRule ^archive\.php.*$ /404.html [F,NC,L] 
+0

謝謝我解決了使用這兩種建議: #此不匹配的404頁 的RewriteCond%{REQUEST_URI}^404 \ html的$ 重寫規則^( [a-zA-Z _] +([a-zA-Z0-9 _] +)?)( - ([0-9] +))?\。html $ /archive.php?action=search§ion=$1 [L ] #這個REDIRECT直接訪問到404 RewriteCond%{THE_REQUEST} \ /archive\.php.* RewriteRule^/404.html? [R = 301,L] – Gennaro

回答

1

我想你實際上要找的是不是這個:

RewriteRule ^archive\.php.*$ /404.html [F,NC,L] 

正如顯然,這將導致一個循環,因爲你的第一條規則被改寫到archive.php,這條規則重寫它別的東西,等等,等等

試試這個,而不是上面的規則:

RewriteCond %{THE_REQUEST} \ /archive\.php 
RewriteRule^/404.html [F,L] 

或者,如果你想成爲幻想一下:

RewriteCond %{THE_REQUEST} \ /archive\.php\?action=search&section=([^&\ ]+) 
RewriteRule^/%1.html [R,L] 
0

基本上這是不可能隱藏真正的文件,因爲Apache的系統。

但是在您的archive.php中,您可以測試當前網址並將其重定向到sport.html,如果這不是「sports.html」。

+0

不,這是可能的。請參閱我在答案中鏈接的文檔。 – Sumurai8

1

您必須確保您的第一條規則不符合404.html。你可以使用RewriteCond。有關更多信息,請參閱the documentation

RewriteCond %{REQUEST_URI} !^404\.html$ 
RewriteRule ^([a-zA-Z_]+([a-zA-Z0-9_]+)?)(-([0-9]+))?\.html$ /archive.php?action=search&section=$1 [L] 
+0

請注意,這可以修復內部服務器錯誤,但不會「隱藏」真實網址。你需要重定向。你可以找到如何做到這一點[這裏](http://stackoverflow.com/questions/18030491/redirect-one-url-to-another-url-using-htaccess/18030624#18030624)或[這裏]( http://stackoverflow.com/questions/19067377/user-id-dynamic-pages-htaccess/19067462#19067462)。 – Sumurai8