RewriteRule捕获整个搜索字符串会产生空结果



.htaccess:中有以下规则

RewriteRule ^order(.*)$ /index.php?p=order&product=$1 [L,NC]

这是一个简化,因为稍后我想添加order?product=(.*)

我使用访问网站

http://website.com/order?product=L0231-03868,但在$_GET中,我只得到这个:

Array ( [p] => skonfiguruj-zamowienie [product] => )

product为空。我错过了什么?

--编辑我加上问号的那一刻

RewriteRule ^order?(.*)$ /index.php?p=order&product=$1 [L,NC]

我得到404

  • 您的URI在order之后没有任何内容,因此在(.*)中没有可捕获的内容
  • 使用QSA标志在重写后附加原始查询字符串
  • 无需在两侧重复order

建议的规则:

RewriteRule ^(order)/?$ index.php?p=$1 [L,NC,QSA]

由于QSA标志,您的原始查询字符串product=L0231-03868将被附加到p=order,并且您将在php文件中获得这两个参数。


关于模式^order?(.*)$生成404的注意事项。请记住,?永远不会是要使用RewriteRule匹配的URI的一部分,因此包含?的模式保证总是失败。

使用您显示的示例,请尝试以下htacces规则文件。确保将htaccess规则文件与index.php文件、订单文件夹一起保存(其中3个应该位于根目录中(。在测试URL之前还要清除缓存。

RewriteEngine ON
RewriteCond %{THE_REQUEST} s/(order)?(product)=(S+)s [NC]
RewriteRule ^  index.php?p=%1&%2=%3 [QSA,L]

为了使其更加Generic,因为上述规则仅针对样本:

RewriteEngine ON
RewriteCond %{THE_REQUEST} s/([^?]*)?([^=]*)=(S+)s [NC]
RewriteRule ^  index.php?p=%1&%2=%3 [QSA,L]

文档链接:

这里使用的是%{THE_REQUEST},它包含完整的请求行。

相关内容

  • 没有找到相关文章

最新更新