2013-04-05 39 views
1

我只是在尋找一種解決方案,將在查詢字符串中找到的任何=,?,&轉換爲一個簡單的斜槓/。 更具體,我的鏈接是一樣的東西:mod_rewrite:transform =和&in斜槓

http://www.mydomain.com/product.php?c=1&sc=12&products_id=15

,我會這樣說: http://www.mydomain.com/product.php/c/1/sc/12/products_id/15

無論母版頁可能(在這種情況下是product.php,但它可能是foo.php,bar.php ...或者其他)。 我GOOGLE了很多,但沒有找到任何好的解決方案來實現我在找什麼。 我發現複雜的重寫規則,但它們都包括了 「網頁名稱」 融入其中: 即

重寫規則^ /指數/([^ /] +)/([^ /] +)$ /? index.php?foo = $ 1 & bar = $ 2 [L,QSA]

該規則僅適用於index.php和已知變量,如foo,bar。 無論主頁是什麼,無論變量是什麼,我都需要更通用的一個。 可以這樣做嗎?

有什麼建議嗎? 謝謝

回答

0

我假設你使用的是apache> = 2.2。添加到您的Apache的conf:

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    # you absolutely need to use RewriteBase if this snippet is in .htaccess 
    # if the .htaccess file is located in a subdirectory, use 
    # RewriteBase /path/to/subdir 
    RewriteBase/

    RewriteCond %{QUERY_STRING} ^(=|&)*([^=&]+)(=|&)?(.*?)=*$ 
    RewriteRule ^(.*)$ $1/%2?%4= [N,NE] 

    RewriteCond %{QUERY_STRING} ^=$ 
    RewriteRule ^(.*)$ $1? [R,L] 
</IfModule> 

第一的RewriteCond /重寫規則對反覆匹配由&分隔令牌或=並將其添加到路徑。重要的標誌是導致整個規則集重新開始的[N],就像規則匹配一樣。此外,a =被追加到查詢字符串的末尾。這是在URL中創建一個至少發生一次重寫的標記。

第二個規則集檢查URL完全重寫併發出重定向後剩下的=標記。

看看http://wiki.apache.org/httpd/RewriteQueryString的一些有用的提示。

+0

謝謝馬塞勒斯,你的片段幾乎成功了! :) 我得到的是: http://www.mydomain.com/web/htdocs/www.mydomain.com/home/product.php/c/1/sc/12/products_id/181 as you可以看到它也需要web服務器目錄web/htdocs/www.mydomain.com/home/ ,這些不應該在那裏。 任何提示? – Aptivus 2013-04-06 10:54:14

+0

當我將片段添加到.htaccess文件時,我也有這種行爲。它似乎將文件路徑添加到相對URL。當我將它添加到httpd.conf/httpd-vhosts.conf中時,該片段完美無瑕地工作。你有權訪問你的.conf文件嗎? – Marcellus 2013-04-06 15:42:45

+0

不幸的是我沒有。任何其他方式取得成功,而無需觸及httpd.conf? – Aptivus 2013-04-06 17:06:26