问题:
我想从www.domain.com/index.php?mod=daily
重定向到www.domain.com/daily_rent
从www.domain.com/advert.php?id=11
重定向到www.domain.com/advert/11
的工作原理如下:
RewriteCond %{THE_REQUEST} advert\.php\?id=([0-9]+)\ HTTP/
RewriteRule ^advert\.php$ http://www.domain.com/advert/%1? [R=301,L]
相同的规则
RewriteCond %{THE_REQUEST} index\.php\?mod=daily\ HTTP/
RewriteRule ^index\.php$ http://www.domain.com/daily_rent? [R=301,L]
重定向到www.domain.com/daily_rent
并抛出404错误。可能是什么原因?
UPD:
从www.domain.com/index.php?mod=daily
重定向到www.domain.com/daily_rent
的工作正常,感谢anubhava
在那种情况下,另一个问题,在类似的页面上,我有多个查询参数,像这样(例子):
www.domain.com/?mod=daily&room=1&area=bstn
所以,我尝试使用该规则
RewriteCond %{THE_REQUEST} \?mod=daily&room=([0-9]+)&area=([A-Z]+)\ HTTP/
RewriteRule ^$ http://www.domain.com/daily_rent/room/%1/area/%2? [R=301,L]
RewriteRule ^daily_rent/room/([0-9]+)/area/([A-Z]+)/?$ /?mod=daily&room=$1&area=$2 [QSA,L]
这种情况的解决方案是什么? 感谢
答案 0 :(得分:0)
当然,你想要反过来 - 将/daily_rent
重定向到/index.php?mod=daily
?这将是一个更常见的用法或mod_rewrite。
RewriteRule ^daily_rent$ /index.php?mod=daily [R=301,L]
您不需要RewriteCond
答案 1 :(得分:0)
因为您缺少内部重写规则。试试这些规则:
RewriteCond %{THE_REQUEST} advert\.php\?id=([0-9]+)\s
RewriteRule ^advert\.php$ /advert/%1? [R=301,L]
RewriteCond %{THE_REQUEST} index\.php\?mod=(daily)\s
RewriteRule ^index\.php$ /%1_rent? [R=301,L]
RewriteRule ^(daily)_rent/?$ /index.php?mod=$1 [QSA,L]
RewriteRule ^advert/([^/]+)/?$ /advert.php?id=$1 [QSA,L]