0

我有以下文件:

/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]

我可以在这里忽略一些非常明显的东西吗?我的语法关闭了吗?

4

1 回答 1

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

  2. 如果他们按照您的意愿行事,您的规则将导致重定向循环。

您无法匹配 a 中的查询字符串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]
于 2012-12-28T01:31:29.793 回答