mod_Rewrite条件和规则(混淆)请帮忙

时间:2011-04-12 14:02:25

标签: mod-rewrite url-rewriting

请帮忙,

经过无数个小时寻找我的问题的解决方案后,我已经变得非常困惑,所以如果之前已经回答了这个问题,那么我的应用就是这样。

我有一个当前的网址:

http://www.mydomain.com/news/dentistry_dental/article_detail.php?article=2968&title=redefining-oral-hygiene-intervention

我正在清理我的网址,所以现在创建了一个重写规则来将以下内容解析为上一个网址:

http://www.mydomain.com/dental_news/2968/Redefining-oral-hygiene-intervention

我在.htaccess文件中使用的规则如下:

RewriteRule ^dental_news/([^/]*)/([^/]*)$ /news/dentistry_dental/article_detail.php?article=$1&title=$2 [L]

这是按预期工作的,但是..我还需要OLD网址(在许多搜索引擎上编制索引),现在指向具有301重定向的新网址。

我尝试过很多东西,但是到目前为止,除了错误之外我什么都没得到,我认为它有一个循环错误。

有没有人知道如何在没有循环的情况下实现双向重定向?

非常感谢任何帮助

修改

上面的问题已经解决了,你可以通过下面的答案看到,但我现在有另一个问题,这应该有助于我理解我希望发生什么:)

我有另一个网址www.mydomain.com/news/dentistry_dental/index.php,我想将其重定向到301 www.mydomain.com/dental_news/

我尝试从下面的答案中重写代码来做到这一点,但这是一个失败,我仍然缺乏对我认为的整个事情的理解。

任何帮助都很棒:)

此致 中号

1 个答案:

答案 0 :(得分:0)

尝试以下方法。第一个条件应该保护您免受重定向循环的影响(它只匹配不以/dental_news开头的请求。%1%2将匹配上一个RewriteCond的相应正则表达式组此外,?上的尾随RewriteRule将删除重定向上的查询字符串。

RewriteCond %{REQUEST_URI} !^\/dental_news\/
RewriteCond %{QUERY_STRING} article=([0-9]*)&title=(.*)$
RewriteRule (.*) /dental_news/%1/%2? [L,R=301]

希望这有帮助。

修改: 我更改了第二个RewriteCond的最后一组以匹配$ $fr=1,如果这是&1,您可以更改RewriteCond的结尾{1}}代替([^&]*)

RewriteCond %{REQUEST_URI} !^\/dental_news\/
RewriteCond %{QUERY_STRING} article=([0-9]*)&title=([^$]*)$
RewriteRule (.*) /dental_news/%1/%2? [L,R=301]

修改

RewriteEngine On

RewriteRule ^dental_news/([^/]*)/([^/]*)$ news/dentistry_dental/article_detail.php?article=$1&title=$2&redirect [L]

RewriteCond %{REQUEST_URI} !^/dental_news/
RewriteCond %{QUERY_STRING} article=([0-9]*)&title=([^&]*)$
RewriteRule (.*) /dental_news/%1/%2? [L,R=301]