2014-01-06 38 views
1

我有一個電子商務網站,在下面的格式產品網址:site.com/product/long-product-title-here?sku=skugoeshere,並希望它的格式爲:site.com/product/long-product-title-here/skugoeshere用於查詢mod_rewrite - 我如何匹配一個URL,但不是它的子目錄?

原因之一是,每個頁面可以有相同的產品的多種變化。

我試圖使用mod_rewrite,使它看起來更好使用下列內容:

# RewriteCond %{QUERY_STRING} ^sku=(.+)$ 
    # RewriteCond %{REQUEST_URI} product/([^/]+)$ 
    # RewriteRule /([^/]+)$ /$1/%1 [R=301,L] 

但這進入形式的重定向循環​​

如何讓我的模式只匹配原始網址?

回答

1

將這個代碼在你DOCUMENT_ROOT/.htaccess文件:

RewriteEngine On 

# external redirect from actual URL to pretty one 
RewriteCond %{THE_REQUEST} \s/+([^/]+/[^/]+)\?sku=([^\s&]+) [NC] 
RewriteRule^/%1/%2? [R=302,L] 

# internal forward from pretty URL to actual one 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{QUERY_STRING} !(?:^|&)sku=[^&]+ 
RewriteRule ^([^/]+/[^/]+)/([^/]+)/?$ /$1?sku=$2 [L,QSA] 
+0

感謝您的幫助!外部重定向部分工作,但內部轉發不,我得到404s。我試圖重定向一個硬編碼的網址(產品/標題/ SKU)沒有條件,也沒有工作。我正在使用Drupal,所以也許這有點奇怪。 – Koozer

+0

當您輸入'site.com/product/long-product-title-here?sku = skugoeshere'它是否正確加載? – anubhava

+0

你也有任何其他規則或任何其他.htaccess? – anubhava

0

這裏跳過斜線

RewriteRule /([^/]+)$ $1/%1 [R=301,L] 
        ^no slash here 
相關問題