我希望重写并使用查询参数重定向网址,如下所示: -
domain.com/link.asp?StockNo=601-0287
如下所示: -
domain.com/Product-Name
许多网址的库存号会有所不同,每个网址的产品名称也不同。
没有多少网址可以手动编写不是问题......
以下内容无效: -
RewriteRule ^link.asp/?StockNo=601-0287$ /Product-Name/$1 [R=301,L]
但这将是一种理想的规则。
处理这些重写的最佳方法是什么?
是否需要RewriteCond?我假设不需要{QUERY_STRING},因为Product-Name与查询字符串不匹配?
提前致谢。
答案 0 :(得分:1)
要将REQUEST_URI和QUERY_STRING匹配在一起,您需要使用%{THE_REQUEST}
通过httpd.conf
启用mod_rewrite和.htaccess,然后将此代码放在.htaccess
目录下的DOCUMENT_ROOT
中:
Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+link\.asp\?StockNo=[^\s]+ [NC]
RewriteRule ^ /Product-Name/? [R=302,L]
编辑:处理特定股票数量:
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+link\.asp\?StockNo=601-0287 [NC]
RewriteRule ^ /Product-A/? [R=302,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+link\.asp\?StockNo=601-0293 [NC]
RewriteRule ^ /Product-B/? [R=302,L]
如果您有太多这些股票要重写,那么我强烈建议您使用RewriteMap。有关详细信息,请参阅此答案:Edit .htaccess with PHP