2010-06-29 121 views
0

我有一個按類別列出產品的目錄。如果_GET變量存在,它將用於查詢中。我想用「漂亮網址」,如:example/a/1/b/2/c/3/d/4成爲example/index.html?a=1&b=2&c=3&d=4.htaccess漂亮的url問題(mod_rewrite)

.htaccess的例子,我只看到使用變量來代替_GET值,但我可以使用規則是這樣的:

Options +FollowSymlinks 
RewriteEngine on 
RewriteRule ([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)$ index.html?$1=$2&$3=$4&$5=$6 [L] 
RewriteRule ([^/]+)/([^/]+)/([^/]+)/([^/]+)$ index.html?$1=$2&$3=$4 [L] 
RewriteRule ([^/]+)/([^/]+)$ index.html?$1=$2 [L] 

它作品...但是,當我添加更長和更長的時間RewriteRules(如出&17=$18),它停止工作。鏈轉成某種陣列的基於先前值的最後一個變量(在它上面將建立index.html?a0=a1&a3=a4)...

  • 有沒有更好的方式來做到這一點?
  • 這似乎效率低下?
  • 是否有.htaccess
  • 多久的規則可以是限制變量的數目?

謝謝!

回答

1

mod_rewrite只支持最多$9%9

我建議您修改腳本以使用$_SERVER['PATH_INFO'],或者使用RewriteMap來調用腳本以將路徑轉換爲查詢字符串。

+0

謝謝!谷歌沒有提供任何關於.htacces中允許有多少變量的結果,現在我知道要嘗試一個不同的方向......會報告回來。 – amos 2010-06-29 05:43:34

1

mod_rewrite只允許您有十個反向引用,其中一個是整個可匹配部分(最終只剩下九個可定義的捕獲組),所以您肯定受限於此。

但是,對我來說,在腳本文件中檢查服務器的REQUEST_URI/SCRIPT_NAME/PATH_INFO變量並解析該變量以從URL獲取鍵值對將更有意義。然後,你只需有這你.htaccess

RewriteRule On 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule . index.html [L] 

然後你的腳本將採取其他的事情。我不得不懷疑,如果你有很多GET變量,如果它們都變成一個「漂亮」的URL,它實際上更具可讀性嗎?畢竟,如果你在URL中有二十個正斜槓,你可能在同一時間僅僅傳遞一個普通的查詢字符串就可以了。這取決於您的應用程序,以及用戶如何與這些URL進行交互,因此您可能有充足的理由希望以這種方式進行操作。

+0

謝謝你們兩個......我從小鎮REQUEST_URI開始,Tim,我正在使用你的示例規則 - 這很容易實現(RewriteMaps給我留下了深刻的印象!)。你說得對,雖然網址有點漂亮,但對我們的客戶來說不是一個巨大的優勢(特別是對於更長/更具體的網址)。但是,對於熟悉我們產品類別的員工而言,這是一種查找內容的便捷方式,並且更易於輸入!而對於更簡單的查詢,網址是可愛的:)再次感謝! – amos 2010-06-29 06:04:29