2013-05-29 64 views
0

我想重写和301重定向的URL与查询参数,如下面: -重写规则参数

domain.com/link.asp?StockNo=601-0287 

的东西,如以下: -

domain.com/Product-Name 

的许多网址的库存号码将会不同,每个网站的产品名称也不相同。

没有很多的URL,以手动进行写入不会是一个问题......

的东西,如以下不工作: -

RewriteRule ^link.asp/?StockNo=601-0287$ /Product-Name/$1 [R=301,L] 

但是,这将是一种所需的规则。

什么是处理这些重写的最好方法?

是否需要RewriteCond?我假定不需要{QUERY_STRING},因为产品名称与查询字符串不匹配?

在此先感谢。

回答

1

要匹配REQUEST_URI和QUERY_STRING在一起,你需要使用%{THE_REQUEST}

启用mod_rewrite的,并通过httpd.conf的.htaccess,然后把这个代码在你.htaccessDOCUMENT_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

+0

感谢您的回复。几乎就在那里 - 它将URL追加到查询字符串(例如:'domain.com/Product-Name/?StockNo = 601-0287')。 '''一切都不是必需的。是否有修改您的答案,将从URL中删除查询字符串?感谢这样一个及时的答案。 – zigojacko

+0

您可以尝试在不同的浏览器中使用,因为'/ Product-Name /%1?'中的'?'会从重定向的URL中删除查询。 – anubhava

+0

同样发生在不同的浏览器(缓存清除只是为了确保)。 – zigojacko