1

我对离子重写过滤器相对较新,我试图配置我的规则集以允许为我的应用程序添加额外的动态规则。我目前为我的应用程序的商店部分定义了以下规则。

RewriteRule ^/shop/(.*)/pages/(.*) /index.cfm?go=shop.products&content=$1&CurrentPage=$2 
RewriteRule ^/shop/(.*)/pages/(.*)/ /index.cfm?go=shop.products&content=$1&CurrentPage=$2 

RewriteRule ^/shop/(.*)$ /index.cfm?go=shop.products&content=$1 
RewriteRule ^/shop /index.cfm?go=shop.products 
RewriteRule ^/products.cfm  /index.cfm?go=shop.products 
RewriteRule ^/details.cfm   /index.cfm?go=shop.products 

服务提供商说我们不允许传入额外的跟踪变量,除非它们以 & 符号作为前缀。

URL 如下所示。

www.domainname.com/shop/category-of-products 
www.dimainname.com/shop/ 

使用它们的附加变量,它们必须执行以下操作

www.domainname.com/shop/category-of-products&additional-query-strings 
www.dimainname.com/shop/&additional-query-strings 

他们需要做的是

www.domainname.com/shop/category-of-products?additional-query-strings 
www.dimainname.com/shop/?additional-query-strings 

我需要做什么才能允许额外的?被引用

非常感谢任何帮助

4

2 回答 2

0

您可以尝试更改重写的正则表达式以允许任何查询字符串参数可选。

例如:

RewriteRule ^/shop/(.*)$ /index.cfm?go=shop.products&content=$1

变成

RewriteRule ^/shop/(.*)(\?.*)?$ /index.cfm?go=shop.products&content=$1

附加(\?.*)?项使表达式匹配问号和后面的所有内容为 0 或 1 次。

我现在无法测试它,但我认为您甚至可能需要通过?在星号后添加一个来使第一个匹配组不贪心:

RewriteRule ^/shop/(.*?)(\?.*)?$ /index.cfm?go=shop.products&content=$1

顺便说一句:这会在您的正则表达式中添加三个问号,每个问号都有不同的含义 - 使前面的运算符不贪婪,匹配文字问号,并匹配前面的表达式 0 或 1 次。

于 2013-10-02T19:46:54.660 回答
0

您也许可以利用 $args 变量。

尝试添加 &$args?在您重写的 URL 的末尾。这 ?最后确保 Nginx 不会自动再次添加查询字符串。

例如

RewriteRule ^/shop/(.*)$ /index.cfm?go=shop.products&content=$1&$args?
于 2013-04-13T21:43:51.470 回答