【问题标题】:Htaccess rule with two parameters具有两个参数的 Htaccess 规则
【发布时间】:2018-11-06 12:46:07
【问题描述】:

我对 ReWriteRule 有疑问。我的 htaccess 是:

ReWriteRule ^(.*)-about-page/?$ index.php?page=testpage&country=$1 [L]
ReWriteRule ^(.*)-(.*)-about-page/?$ index.php?page=testpage&country=$1&city=$2 [L]

如果这样的链接:http://www.example.com/countryname-about-page/ 运行良好。但是当链接是这样的时候不起作用:http://www.example.com/countryname-cityname-about-page/ city= 确实是空的,而 country= 确实带有城市 (country=countryname-cityname)

我该如何解决?

我的第二个问题是: 我怎样才能为此使用一个 ReWriteRule 而不是两个 ReWriteRule?

ReWriteRule ^(.*)(-(.*)-?)-about-page/?$ index.php?page=testpage&country=$1&city=$3 [L]

1) http://www.example.com/countryname-about-page/(404 未找到)

2) http://www.example.com/countryname-cityname-about-page/(工作)

【问题讨论】:

  • 这行得通吗? RewriteRule ^(.*)(?:-(.*))?-about-page/?$ index.php?page=testpage&country=$1&city=$3 [L]
  • 无法编辑错字:$2 而不是 $3 那里
  • @SparK 谢谢你的回答。适用于 1 和 2 个网址。但是第二个 url city 参数确实又变空了。城市参数以 - 字符出现在国家参数中 (country=countryname-cityname) 如何执行 (country=countryname) 和 (city=cityname)
  • 我改成 $2 而不是 $3 结果是一样的 (country=countryname-cityname)
  • 在这里测试并发布了答案

标签: regex .htaccess


【解决方案1】:

您可能希望避免在第一个捕获组中捕获破折号 - 并将第二个设为可选,如下所示:

RewriteRule ^([^-]*)(?:-(.*))?-about-page/?$ index.php?page=testpage&country=$1&city=$2 [L]
  • 第一个捕获组([^-]*) 捕获任何不是破折号的字符;
  • 第二个是非捕获组?:,它就在那里,所以我们可以在最后用? 表示它是可选的;
  • 第三个捕获组捕获破折号之后和-about-page之前留下的任何东西:(.*)

这是结果:

【讨论】:

  • 现在两个 url 和两个参数工作正常。感谢您提供有关导致问题的原因的回答和有用的解释信息以及 - 字符信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
  • 2014-06-14
  • 2014-12-08
相关资源
最近更新 更多