我在网站的根目录中有一个.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
我的问题是:如何捕获查询字符串并相应地从此文件夹重定向?
答案 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]