混淆两个重写规则网址

0

的问题

这两种规则的混淆:

RewriteRule ^health-institute-([a-zA-Z\-]+)-([a-zA-Z\-]+)$ search.php?city=$1&speciality=$2 [L] 
RewriteRule ^health-institute-app-([a-zA-Z\-]+)$ search.php?city=$1 [L]

当我想到达 health-institute-app-mycity (第2条规则)的服务器考虑 app 作为一个价值和尽量达到 search.php?city=app&speciality=mycity (第1条规则)

我怎么可以说,这是两个独立的规则?

.htaccess apache mod-rewrite
2021-11-23 10:56:12
1

最好的答案

2

是的,因为regex ^health-institute-([a-zA-Z\-]+)-([a-zA-Z\-]+)$ 在第一个规则也匹配 health-institute-app-mycity.

你需要扭转这两个指示,因此更具体的规则是第一次。

例如:

RewriteRule ^health-institute-app-([a-zA-Z-]+)$ search.php?city=$1 [L]
RewriteRule ^health-institute-([a-zA-Z-]+)-([a-zA-Z-]+)$ search.php?city=$1&speciality=$2 [L] 

(没有必要反斜杠-逃的连字符当在开始或结束符类。)

然而,regex在(现在)的第二项规则可能是模糊的,因为连字符的(-)是用于划定该两个值(cityspeciality),但连字也包括在两个性质的类别,这样它可以大概能一部分的价值观本身。 然而,既 city speciality 不能既含有连字符的,尽管regex似乎允许这一点。

例如,如何应请求 health-institute-foo-bar-baz-qux 要解决? 由于quantifier +贪婪的,这将目前的结果 search.php?city=foo-bar-baz&speciality=qux. 如果有连字符的 speciality (作为建议这种可能的情况下通过regex)它将永远不会是匹配的。

2021-12-09 22:55:14

@narseoh实际上,由于这些数值分隔的一个连字符,通过包括连字符的性质的类别(即。 值本身可以包含一个连字符)你是引入一个模糊性。 例如。 应该什么 health-institute-foo-bar-baz-qux 解决? 可以的 city 含有连字符的?
MrWhite

是的,事实上,一些城市有一个连在城市的名称和其他城市有两个词,空间是替换由一个连字符的url
narseoh

@narseoh确定,所以 speciality 从来没有包含一个连字符的? (否则,它将成为一部分的 city.) 在这种情况下的连字号应该删除的 speciality 字符类,以消除这种模糊/混淆,因为它是多余的。
MrWhite

谢谢@MrWhite,实际上甚至专业能具有连字符,这使得事情有点复杂我。 我想它和替换为(-)与(/)以独立的数据,说我有其它问题(我将建立另外一个线程有关它)
narseoh

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................