我有一个电子商务网站,产品网址采用以下格式:site.com/product/long-product-title-here?sku=skugoeshere
并希望采用以下格式:site.com/product/long-product-title-here/skugoeshere
查询的一个原因是每个页面可能包含同一产品的多个变体。
我正在尝试使用mod_rewrite使用以下内容使其看起来更好:
# RewriteCond %{QUERY_STRING} ^sku=(.+)$
# RewriteCond %{REQUEST_URI} product/([^/]+)$
# RewriteRule /([^/]+)$ /$1/%1 [R=301,L]
但这会进入site.com/product/title/title/title...
如何使模式仅与原始网址匹配?
答案 0 :(得分: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]
答案 1 :(得分:0)
跳过此处的前导斜杠
RewriteRule /([^/]+)$ $1/%1 [R=301,L]
^ no slash here