.htaccess重定向到404错误

时间:2014-01-10 10:54:45

标签: php regex apache .htaccess mod-rewrite

问题: 我想从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]

这种情况的解决方案是什么? 感谢

2 个答案:

答案 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]