我想弄清楚如何设置一个mod_rewrite规则,以便对页面的请求,附加一个URL参数,确定从该文件服务的根。
设置是这样的。在foo目录下有bar, bar19, bar27等。
理想情况下,我想匹配"v"参数的前两个字符。像这样:
我想请求 .....................从:
www.example.com/foo/bar/something.html .......... foo/bar/something.html
www.example.com/foo/bar/something.html?v=19xxx ... foo/bar19/something.html
www.example.com/foo/bar/something.html?v=27xxx ... foo/bar27/something.html
当然,我希望如果"v"参数的值没有对应的目录到404.
我以前做过一些Mod_Rewrite魔法,但我有点卡在这里。什么好主意吗?
添加/foo
目录下的.htaccess
文件,内容如下。当然,您也可以将其插入httpd.conf
:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /foo
# match query parameter v with two-digit value; capture
# the value as %2 and the query string before and after v
# as %1 and %3, respectively
RewriteCond %{QUERY_STRING} ^(.*)v=(dd)[^&]*(&.*)?$
# match path into "bar" and rest; insert two-digit value from
# RewriteCond inbetween; append rest of query string without v value;
# use case-insensitivity
RewriteRule ^(bar)(.*)$ $1%2$2?%1%3 [NC]
</IfModule>
我认为关键是使用从RewriteCond捕获的值(可以访问%1,%2等)和同时从RewriteRule本身捕获的值(像往常一样$1,$2等)。