问题
In my .htaccess file I have defined following rule,
RewriteRule t/([^.]+)/$ /videos/tag.php?tag=$1 [QSA]
The above rule works fine if I am browsing http://example.com/videos/t/world+news/
or http://example.com/videos/t/events/
but when I am browsing http://example.com/videos/t/business+%26+world/
(here original tag is: business & world) then in my query string tag
variable I am getting only business. '& world' is not coming when I am fetching variable data through $_GET['tag']
Can anyone please tell where is the problem in the above rule??
回答1:
Try the B flag to escape the backreference:
RewriteRule ^t/([^.]+)/$ /videos/tag.php?tag=$1 [B,QSA]
Edit How about this:
RewriteRule ^([^&]*)&(.*)/$ $1\%26$2 [N,NE]
RewriteRule ^t/([^.]+)/$ /videos/tag.php?tag=$1 [QSA]
The first rule is to replace the &
with %26
.
来源:https://stackoverflow.com/questions/1124618/how-to-handle-special-characters-in-htaccess-rules