禁止网址的htaccess重写规则

我对 htaccess 重写并不陌生,但今天我看到了一个我以前从未见过的规则:

# Access block for folders
RewriteRule _(?:recycler|temp)_/ - [F]

此规则是Typo3 htaccess文件的一部分。

“?:”是什么意思?这是某种反向引用吗?下划线代表什么?非常感谢!

回答

RewriteRule _(?:recycler|temp)_/ - [F]为了更好地理解,规则可以分为 2 个规则。喜欢:

RewriteRule _recycler_/ - [F]

RewriteRule _temp_/ - [F]

现在让我们了解这意味着什么:

  • 您可以看到它是从 2 个规则中创建 1 个规则的快捷方法。
  • 我们可以使用正则表达式来匹配多个模式,并对落入相同条件(由正则表达式匹配)的 URI 执行相同类型的操作。
  • 在这种情况下,我们试图匹配_(文字字符)后跟(?:recycler|temp). 哪里?:代表一个非捕获组。因此,本节中的任何内容(?:.......)都不会具有反向引用功能。它基本上匹配字符串/文本recyclertemp在正则表达式中,其前后是_
  • 现在是捕获组:在 .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]

上面例子的解释:它只是简单地制作了 2 个捕获组,第一个将有第一个或第二个捕获组,第二个捕获组将包含任何内容(因为我们使用了 .*),因此在重写我们正在使用的部分$1$2获得值时。你可以清楚地看到我们也可以在条件部分使用这些值(在后端变成:%{DOCUMENT_ROOT}/first.phpOR%{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]

上面例子的解释:我们可以看到我们在规则端匹配firstORsecond,所以现在 $1 的值将是第三个或第四个,因为我们第一次/第二次使用了非捕获组。所以后端条件检查将变成:%{DOCUMENT_ROOT}/third.php%{DOCUMENT_ROOT/fourth.php


以上是禁止网址的htaccess重写规则的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>