2016-11-01 44 views
0

好吧,我对.htaccess有点麻烦,因为我是初学者。这是我想要完成的。htaccess - 用两条规则重写url

URL DESIRED: 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。

开头的URL: example.com/package/forest/list/5/2015-10-03

STILL所需的URL: example.com/package/forest

区别在于,我想重写或重定向,不确定这个词,是

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

这次。

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

回答

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。由于同样的原因,您不必担心堆叠;第一条规则只适用于短uri以“forest /”结尾,仅次于那些有日期的人。
另一方面,我想知道你为什么使用QSA标志。包含查询的uri将永远不会匹配,因为后面的美元符号。