规则
RewriteRule _(?:recycler|temp)_/ - [F]
可分为两条规则,以便更好地理解。比如:
RewriteRule _recycler_/ - [F]
和
RewriteRule _temp_/ - [F]
现在让我们理解这意味着什么:
-
您可以看到,这是一种快捷方法,可以在两条规则中选择一条。
-
我们可以使用正则表达式匹配多个模式,并对符合相同条件(由正则表达式匹配)的URI执行相同类型的操作。
-
在这种情况下,我们试图匹配
_
(文字字符)后跟
(?:recycler|temp)
哪里
?:
支持非捕获组。所以这一部分的内容是什么
(?:.......)
不会有反向引用功能。它基本上与字符串/文本匹配
recycler
或
temp
在正则表达式中,前面和后面都是
_
-
现在是什么是捕获组:在。htaccess我们可以使用捕获匹配值的功能,稍后我们可以使用这些功能,例如-->
$1
对于获取第一个捕获的值(存储在内存中),我们可以说非捕获组告诉我们要匹配正则表达式,但不将其存储到内存中(因为我们不想在以后的程序中使用它)。
以下是在htaccess规则中捕获组规则的示例:
RewriteEngine ON
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f [NC]
RewriteRule ^(first|second)/(.*)?$ $1.php?$2 [QSA,NC,L]
对上述示例的解释:
它只是由两个捕获组组成,第一个捕获组包含第一个或第二个捕获组,第二个捕获组包含任何内容(因为我们使用了。*),所以在重写我们正在使用的部分时
$1
和
$2
要实现这些价值观。您可以清楚地看到,我们也可以在条件部分中使用这些值(在后端变成:
%{DOCUMENT_ROOT}/first.php
或
%{DOCUMENT_ROOT}/second.php
).
以下是htaccess规则中未捕获组的示例:
RewriteEngine ON
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/$1.php -f [NC]
RewriteRule ^(?:first|second)/(third/fourth)/?$ $1.php [QSA,NC,L]
对上述示例的解释:
我们可以看到,我们是匹配的
first
或
second
在规则方面,现在$1的值将是第三个或第四个,因为我们使用非捕获组作为第一个/第二个。因此,后端条件检查将变为:
%{DOCUMENT_ROOT}/third.php
或
%{DOCUMENT_ROOT/fourth.php