【问题标题】:.htaccess dash in argument.htaccess 参数中的破折号
【发布时间】:2020-09-05 04:43:13
【问题描述】:

我有以下 htaccess 规则:

RewriteRule ^listen/([^/]*)-([^/]*)/$ listen.php?pl=$1&id=$2 

有时第二个参数 (id) 中有一个破折号,我得到 404 Not found,例如:

mysite.com/listen/something-293Xff4-yZ (ID为293Xff4-yZ

问题是,当我尝试获取 ID 参数时(使用 $_GET['id']) - 我只得到 ID 的第一部分(破折号之前 - 293Xff4

知道在这种情况下如何获取 ID 的完整部分吗?

谢谢!

【问题讨论】:

  • 哪些是导致 404 错误的 URL 示例?
  • @anubhava 添加了一个示例

标签: php .htaccess nginx mod-rewrite


【解决方案1】:

您可以在RewriteRule 中使用此正则表达式:

RewriteRule ^listen/([^-]+)-([^/]+)/?$ listen.php?pl=$1&id=$2 [L,QSA,NC]

还建议在您的 .htaccess 顶部使用Options -MultiView,因为它可能会在某些默认启用它的 Apache 版本上导致问题。

【讨论】:

  • 不过,$_GET['id'] 返回破折号前的第一部分,缺少 yZ
  • 啊,我错了,你现在可以试试我更新的规则吗。
  • [^-]+ 将在/listen/ 之后返回第一个- 之前的部分,[^/]+ 将匹配下一个/ 之前的所有内容
猜你喜欢
  • 1970-01-01
  • 2012-07-15
  • 1970-01-01
  • 1970-01-01
  • 2019-03-09
  • 2011-03-28
  • 2019-11-02
  • 1970-01-01
  • 2021-11-09
相关资源
最近更新 更多