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

Categories

0 votes
598 views
in Technique[技术] by (71.8m points)

.htaccess - Question mark in the end of RewriteRule

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

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

1 Answer

0 votes
by (71.8m points)

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...