我如何在url中用%C2%A0重写.asp

时间:2014-09-12 13:11:31

标签: asp.net regex apache .htaccess mod-rewrite

我已更改了我的网站,并希望重写以下链接:

mysite.co.uk/productdetails/617/6/Casio%C2%A0CDP120%20Digital%20Piano%20in%20Black/

mysite.co.uk/Casio-CDP120-Digital-Piano-in-Black/302

问题是%C2%A0过去%20不知道为什么会发生这种变化但是当它是%20时我可以像这样重写它:

RewriteRule "^productdetails/617/6/Casio CDP120 Digital Piano in Black/?$" /Casio-CDP120-Digital-Piano-in-Black/302 [L,NC,R=301]

其他网址是:

mysite.co.uk/productdetails/647/6/Casio%20PX350%20Digital%20Piano%20in%20Black/

mysite.co.uk/Casio-PX350-Digital-Piano-in-Black/296

这些我改写如下: RewriteRule "^productdetails/647/6/Casio PX350 Digital Piano in Black/?$" /Casio-PX350-Digital-Piano-in-Black/296 [L,NC,R=301] 这些网址混合在一起(每个产品的最后一个数字都不同。

欢迎任何帮助

1 个答案:

答案 0 :(得分:0)

遵循3条规则将处理这个奇怪的URL重写的问题。将它放入你的根.htaccess

RewriteEngine On
RewriteBase /

# take care of %C2%A0
RewriteRule ^(.+)\xc2\xa0(.+)$ $1-$2 [L,NE]

# executes **repeatedly** as long as there are more than 1 spaces in URI
RewriteRule "^(\S*) +(\S* .*)$" $1-$2 [L,NE]

# executes when there is exactly 1 space in URI 
RewriteRule "^productdetails/617/6/(\S*) (\S*?)/?$" /$1-$2/302 [L,R=302,NE]

RewriteRule "^productdetails/647/6/(\S*) (\S*?)/?$" /$1-$2/296 [L,R=302,NE]