htaccess - 用两个规则重写url

时间:2016-11-01 16:54:25

标签: regex .htaccess url-rewriting url-redirection

好吧,我在使用.htaccess方面有点麻烦,因为我是初学者。这就是我想要实现的目标。

要求的网址:example.com/package/forest /

我现在拥有的:

RewriteRule ^package/forest/$
/deep/file/do_stuff.php?action=package&location=forest [R=301,QSA,L]

这是按预期工作的,当您访问example.com/package/forest时,您将获得do_stuff.php生成的页面。如果我想将额外的GET变量发送到do_stuff页面但保留相同的URL,那么我无法获得的难点就是如何。

启动网址: example.com/package/forest/list/5/2015-10-03

仍然需要的网址 example.com/package/forest

不同之处在于,我希望重写或重定向,不确定该术语是

/deep/file/do_stuff.php?action=package&location=forest&pictures=5&date=2015-10-03 

这次。

不确定如何堆叠规则,以便我最终使用相同的URL,无论它们是否传递额外的变量。

1 个答案:

答案 0 :(得分:0)

RewriteRule ^package/forest/list/(\d)/(\d{4}-\d{2}-\d{2})$ package/forest/deep/file/do_stuff.php?action=package&location=forest&pictures=$1&date=$2

正则表达式捕获两组,一组有一位数,一组有日期。这些稍后用作$ 1和$ 2。

不幸的是我无法测试它,因为我正在使用nginx,所以我不能100%确定我是否正确。 我考虑过uri是否会在第一次重写后再次重写,因为" package / forest /"仍然匹配,但字符串末尾的美元符号应该防止任何比匹配更长的时间。 出于同样的原因,你不必担心堆叠;第一条规则仅适用于以"森林/"结尾的简短uri,第二条规则仅适用于最后日期的第二条规则。
另一方面,我想知道你为什么使用QSA标志。由于尾随美元符号,包含查询的uri将永远不会匹配。