具有两个参数的htaccess规则

时间:2018-11-06 12:46:07

标签: regex .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/(有效)

1 个答案:

答案 0 :(得分:1)

您可能要避免在第一个捕获组中捕获破折号-,而使第二个可选破折号像这样:

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

这是结果: Results showing the parsed parameters