我在.htaccess中有这条最终规则

RewriteRule ^(.*)$ index.php?query=$1 [NC,L,QSA]

然后我输入URL:

domain.com/docs/getting-started/installation-%26-config

当我使用$_GET变量时,这是我预期的结果:

Array(
    [query] => docs/getting-started/installation-&-config
)

然而,这是我得到的结果

Array(
    [query] => docs/getting-started/installation-
    [-config] => 
)

是否可以对来自.htaccess的查询进行编码?如果不是,我如何解决这个问题?

推荐答案

RewriteRule ^(.*)$ index.php?query=$1 [NC,L,QSA]

您需要包括B标志来重新编码捕获的反向引用,因为RewriteRule pattern匹配的URL路径是URL解码的.例如:

RewriteRule (.*) index.php?query=$1 [B,L,QSA]

(这里不需要NC标志.RewriteRule pattern上的startend-of-string锚也不是.)

参考资料:

Php相关问答推荐

如何在搜索域名时重定向到登陆页?

使用WooCommerce本机产品短码时不考虑价格筛选(_SHORT CODE)

将带有值的属性添加到WooCommerce产品,保留现有属性

仅在WooCommerce管理订单视图上显示订单项自定义元数据

WooCommerce/WordPress:简单的产品属性显示

根据WooCommerce Cart小计阈值自动应用优惠券

Laravel Carbon DiffForHumans选项(年,月,天)

shell_exec运行大型数据处理

更改特定产品标签的 Woocommerce 产品名称

按类别层次 struct 过滤 Laravel 集合

在 PHP MySQL 中自动生成账单编号

.htaccess 重写规则问题

通过添加计数器修改文本区域表单中的重复值

从插件更改主题功能,function_exists 不起作用

Composer自动加载器重复了子类的类文件路径

.htaccess环境变量条件不被判断

在 Symfony 测试中何时使用 TestCase 而不是 KernelTestCase

Laravel 8:会话不适用

我怎样才能在 .htaccess 中有 2 个参数?

构建 [Controller] 时目标 [Interface] 不可实例化