我有這樣一個骯髒的URL:http://www.netairspace.com/photos/photo.php?photo=3392。 我想要做一些類似http://www.netairspace.com/photos/OH-LTU/Finnair_Airbus_330-202X/OUL_EFOU_Oulu/photo_3392/(並且稍後支持諸如http://www.netairspace.com/pic/3392/之類的簡短網址,但我不會說)。.htaccess和SEO網址 - 爲什麼這是一個無限循環?
所以我有一個腳本photo_seo_url.php,它需要照片ID,建立SEO網址,並做一個重定向(302爲測試,301當我滿意)。然後,我計劃在調用舊的URL添加的.htaccess mod_rewrite的規則,以便:
- 舊的URL將被改寫內部對photo_seo_url.php
- photo_seo_url.php會301/302重定向到URL SEO
- SEO的URL將被改寫內部對原始photo.php
這樣,我會,從理論上講,拿到SEO URL的優勢,同時能夠在我的閒暇退休舊的。
這是我使用的規則:
RewriteEngine on
RewriteRule ^photos/.*/photo_([0-9]+)/?$ photos/photo.php?photo=$1 [NC,L]
RewriteCond %{QUERY_STRING} photo=([0-9]+)
RewriteRule ^photos/photo\.php$ photos/photo_seo_url.php?photo=%1 [NC,L]
但是,進入一個無限重定向循環。爲什麼,如果這兩個人正在進行內部重寫而不是外部重定向 - 或者我缺少的是什麼?
我已經解決了添加新的文件showphoto.php,它不只是包括原始photo.php,並改變線路2問題:
RewriteEngine on
RewriteRule ^photos/.*/photo_([0-9]+)/?$ photos/showphoto.php?photo=$1 [NC,L]
RewriteCond %{QUERY_STRING} photo=([0-9]+)
RewriteRule ^photos/photo\.php$ photos/photo_seo_url.php?photo=%1 [NC,L]
但我還是想了解爲什麼原始版本進入無限循環。我錯過了或誤解了一些東西。我的方法是否正確?
第一組規則對我來說看起來很好 - 如果可以的話,嘗試添加一些重寫日誌記錄以查看發生了什麼。我無法發現會出現循環的情況。 – Ansari
我按照http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html#rewritelog的規定,在調試級別爲4的httpd.conf中添加了RewriteLog,然後重新啓動。在提出請求時,會創建一個空白的日誌文件。 –
是的,就是那個。 – Ansari