如何根据子文件夹中的查询字符串创建301重定向?

时间:2009-08-26 11:16:07

标签: apache .htaccess redirect

我在网站的根目录中有一个.htaccess文件:

/var/www/mywebsite/htdocs/.htacess

我在

中有一些文件
/var/www/mywebsite/htdocs/folder/

目前由index.php生成?pc = 1234

我想将查询字符串变量中的数字重定向到该文件夹​​中的静态html页面。我可以通过以下方式在网站根目录中的.htacess文件中实现此目的:

RewriteRule ^folder/\?pc=1 /folder/filename.html [R=301,L]

然而,由于这些文件中有一些,如果我可以在以下位置创建.htaccess文件会很有用:

/var/www/mywebsite/htdocs/folder/.htaccess

我的问题是:如何捕获查询字符串并相应地从此文件夹重定向?

3 个答案:

答案 0 :(得分:2)

在301的RewriteRule之前,放置如下内容:

  

RewriteCond %{QUERY_STRING} MATCH

其中MATCH是您想要匹配的内容。您可以在最后使用[OR]块的多个。

您可以在Apache's website找到更多信息。

答案 1 :(得分:2)

感谢Residuum和Nerdling。你们给了我一些想法。

这就是我最终的结果。以下是/var/www/mywebsite/htdocs/folder/.htaccess

RewriteEngine On
RewriteBase /folder
RewriteCond %{QUERY_STRING} pc=1
RewriteRule ^$ filename.html? [R=301,L]

如果我没有包含RewriteBase,则URL将显示为:

www.mywebsite.com/var/www/mywebsite/htdocs/folder/

但它看起来像是:

www.mywebsite.com/folder/filename.html

我还必须创建一个重写规则,它捕获一个空白文件名,即“^ $”,然后delcare我想要pc = 1的文件名。

再次感谢Residuum,Nerdling

答案 2 :(得分:1)

在子文件夹中,仅使用相对网址:

RewriteEngine On
RewriteBase /folder
RewriteRule ^\?pc=1 filename.html [R=301,L]
RewriteRule ^\?pc=2 someotherfilename.html [R=301,L]

或类似于使用RewriteCond,正如Nerdling所说,但使用skip来重写规则,如下所示:

# this will skip the two line for anything not matching ^folder/\?pc=
RewriteRule !^folder/\?pc= - [S=2] 
RewriteRule ^folder/\?pc=1 /folder/filename.html [R=301,L]
RewriteRule ^folder/\?pc=2 /folder/someotherfilename.html [R=301,L]
# anything else will be interpreted again

或者使用规则终止其他任何解释:

RewriteRule !^folder/\?pc= - [L] 
RewriteRule ^folder/\?pc=1 /folder/filename.html [R=301,L]
RewriteRule ^folder/\?pc=2 /folder/someotherfilename.html [R=301,L]