首页 > 解决方案 > 具有两个参数的 Htaccess 规则

问题描述

我对 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/(工作)

标签: regex.htaccess

解决方案


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

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

这是结果: 显示解析参数的结果


推荐阅读