【问题标题】:.htaccess cannot catch GET parameter.htaccess 无法捕获 GET 参数
【发布时间】:2014-06-29 22:58:14
【问题描述】:

.htaccess

RewriteRule ^apply/import?$ index.php?action=import [NC]
RewriteRule ^apply/import/([0-9a-zA-Z]+)/?$ index.php?action=import&code=$1 [NC]

我运行以下 url 和 print_r($_GET)

"localhost/apply/import" //Prints Array ( [action] => import ) as expected

"localhost/apply/import?code=abc123" // Prints Array ( [action] => import ) only, and is missing code.

如何捕获获取变量代码?

【问题讨论】:

  • htaccess 的第二行导入后有一个斜线..
  • @scrowler 删除了斜线,甚至尝试用问号替换它?。在任何一种情况下,它仍然失败。第一个 htaccess 规则仍然首先执行。

标签: php .htaccess get


【解决方案1】:

使用"localhost/apply/import?code=abc123",匹配第一条规则(您可以通过删除第二条重写代码来检查它)
如果你想触发第二个重写规则,你应该试试localhost/apply/import/abc123 这样的结果:

数组([动作] => 导入[代码] => abc123)

更新:我认为这可以解决您的问题:
您可以在第一个重写规则中使用[QSA] 获取额外的查询字符串参数:

RewriteRule ^apply/import?$ index.php?action=import [QSA]

然后去localhost/apply/import?code=abc123会输出这个:
数组 ([action] => import [code] => abc123)

您可以阅读有关RewiteRule Flags 的更多信息。解释如下:

当替换 URI 包含查询字符串时,默认行为 RewriteRule 的就是丢弃已有的查询字符串,并替换它 与新生成的。使用 [QSA] 标志会导致查询 要组合的字符串。

【讨论】:

  • 没错,它甚至没有达到第二条规则。我无法使用代码参数控制 url。到目前为止,我唯一的解决方法是放弃此特定场景的 htaccess 规则,但这并不理想。
  • 在第二条规则中,您显然声明您正在寻找这样的模式:localhost/apply/import/somecode 所以您不能指望除此之外的其他内容匹配。但是,我想我找到了你想要的,我更新了我的答案。
  • 我之前看到过这个解决方案,但不清楚如何实现。谢谢你。 +1
  • 不客气。我已经完善了我的答案,并添加了一些解释。看看吧。
猜你喜欢
  • 2015-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多