這個問題已經被編輯過澄清:如何避免在mod_rewrite中循環?
我想如下打造「漂亮網址」應該把自己僞裝:
mysite.com/index.php?p=1 = => mysite.com/site_one/index.php
mysite.com/aboutus.php?p=2 ==> mysite.com/site_two/aboutus.php
mysite.com/anypage.php? p = 3 ==> mysite.com/site_three/anypage.php
正如你所看到的,mod_rewrite的應該簡單地轉換爲「P」變到預定的僞目錄(該目錄不存在......這只是一個審美重寫)。
很明顯,這會造成一種複雜化。當用戶訪問mysite.com/site_one/index.php時,應該有一個背景轉移到mysite.com/index.php?p=1。此背景傳輸會導致導致服務器錯誤的循環。
我試圖通過使用下面的代碼,以防止這種循環:
RewriteCond %{QUERY_STRING} !NON=
RewriteCond %{QUERY_STRING} ^(.*[&?])?p=1([&].*)?$
RewriteRule ^/?(.*) /site_one/$1 [PT,L]
RewriteCond %{QUERY_STRING} !NON=
RewriteRule ^/?site_one/?(.*) /$1?NON=1&p=1 [PT,L]
不幸的是,這還是引起了服務器錯誤。任何人都可以看到代碼出錯的地方嗎?
雖然我非常有信心可以將一些基於RewriteCond的規則集中在一起來幫助您解決這個特定情況,但這可能無濟於事。有關您需要處理的頁數的更多信息,以及如何維護「p」值與友好URL之間的映射關係,這對您的問題會有幫助。 – timdev 2012-04-19 20:45:21
當然,讓我更詳細地解釋一下: 「p」的值可能會改變,所以我會爲每個「p」值添加規則。例如,如果「p = 1」,該網站將顯示「mysite.com/site_one」。如果「p = 2」,該網站將顯示「mysite.com/site_two」。如果「p = 3」並且用戶正在呼叫名爲「about.php」的頁面,則站點應該顯示「mysite.com/site_three/about.php。 基本上,」p「變量只是僞裝成目錄 我希望這是有道理的。 – inveni0 2012-04-19 20:58:45
爲什麼不直接在$ p變量中命名頁面,以便您可以執行諸如www.mysite.com/about/ - > www.mysite.com/page .php?p =大約。這隻需要1條規則,而不必爲每個頁面設置規則 – Tom 2012-04-19 21:00:39