具有查询参数的URL所需的RewriteRule

时间:2013-05-29 15:20:36

标签: apache .htaccess mod-rewrite url-rewriting

我希望重写并使用查询参数重定向网址,如下所示: -

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与查询字符串不匹配?

提前致谢。

1 个答案:

答案 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