.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}
,它包含完整的请求行。