Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

RewriteCond %{QUERY_STRING}  ^id=(.*)$
RewriteRule ^oldpage.php$ http://new-site.com/newpage-%1 [R=301,L]
and
RewriteRule ^oldpage.php$ http://new-site.com/newpage-%1? [R=301,L]

In first case result is
new-site.com/newpage-3?id=3
in second
new-site.com/newpage-3

What does question mark in second rewrite rule means?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
569 views
Welcome To Ask or Share your Answers For Others

1 Answer

The ? at the end of a destination (destinations are not regular expressions) means to go to that destination with no query string.

RewriteCond %{QUERY_STRING}  ^id=(.*)$
RewriteRule ^oldpage.php$ http://new-site.com/newpage-%1 [R=301,L]

If the query string contains only an id, it stores the value which is then used in the destination, so if you have

http://foo.com/oldpage.php?id=54

you'll end up with

http://new-site.com/newpage-54?id=54

If you have

RewriteCond %{QUERY_STRING}  ^id=(.*)$
RewriteRule ^oldpage.php$ http://new-site.com/newpage-%1? [R=301,L]

You'll go to the same destination but with an empty query string, so going to

http://foo.com/oldpage.php?id=54

will end up in

http://new-site.com/newpage-54

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...