.htaccess从一个子目录重写到另一个子目录

时间:2012-12-28 00:55:25

标签: .htaccess mod-rewrite

我有以下文件:

/forums/faq.php - http://www.domain.com/forums/faq.php

我想调用这个文件(通常以faq.php?faq = faqname的形式)来重写为:

/faq/faqname - http://www.domain.com/faq/faqname

我一直在尝试以下.htaccess规则无济于事。在我的根.htaccess:

RewriteRule ^forums/faq.php?faq=(.*)$ faq/$1 [L,R=301]
RewriteRule ^faq$ faq/ [L,QSA,R=301]

在我的/forums/.htaccess上:

RewriteRule ^faq.php?faq=(.*)$ http://www.domain.com/faq/$1 [L,R=301]

我可以忽视这里真正明显的东西吗?我的语法是否关闭?

1 个答案:

答案 0 :(得分:0)

  1. 您可以放弃/forums/ htaccess中的规则,规则优先于文档根目录中的规则。你在两个地方都不需要它们。

  2. 如果您的规则符合您的要求,您的规则就会导致重定向循环。

  3. 您无法与RewriteRule中的查询字符串进行匹配,因此第一条规则与任何内容都不匹配。你真正想做的是与实际请求相匹配。

    # redirect /forums/faq.php?faq=faqname to /faq/faqname
    RewriteCond %{THE_REQUEST} \ /forums/faq\.php\?faq=([^&\ ]+)
    RewriteRule ^forums/faq.php$ /faq/%1? [L,R=301]
    

    然后你需要在内部改回来

    RewriteRule ^faq/(.+)$ /forums/faq.php?faq=$1 [L,QSA]