<Directory ~ /home/user/(site|sitedev)>
...
</Directory>
<DirectoryMatch ^/home/user/(site|sitedev)>
...
</DirectoryMatch>
"/home/user/(site|sitedev)"
/home/user/(site|sitedev)
/home/my/site
/home/my/siteblog
/home/my/sitestore
or any other that starts with /home/my/site doesn't go deeper like /home/my/siteblog/random
这两个可以作为解决方案吗?有什么区别?
^/home/my/site.*
/home/my/^site.*
我不是专家,但我想说:
<Directory ~ "^/home/user/(site|sitedev)">
<DirectoryMatch "^/home/user/(site|sitedev)">
你是对的,如果有空格,需要引号。
我个人总是引用它们,以保持配置文件的一致性。
^/home/my/site.*
正确的是:
^
的意思是“开始于”。这就是为什么它不能放在前面
就像您在/home/my/^site.*
中提到的“网站”。如果你不这样做
将这个 ^
放在开头,然后是一个 URL,例如
/test/home/user/sitedev
也会匹配。这是因为一个
模式的使用类似于搜索,如果在路径中找到它,则
它匹配,您将进入 <DirectoryMatch>
块。与
^
相反,您可以使用$
,意思是“完成”。\.jpe?g$
匹配非常有用,其中
点应该被转义,因为 .
表示“任何字符”并且
?
表示前面的“e”字符是可选的。当然,这个例子不会用在 <DirectoryMatch>
上,而是用在
<FilesMatch>
。
注意,正则表达式可以区分大小写,也可以不区分大小写,因此无法匹配
/img/IMG234.JPG
取决于配置。我认为这取决于
正则表达式默认选项。
ICASE
是否“开启”。
但我通常更喜欢通过启用来解决这个配置问题 模式开头的“不区分大小写”标志
(?i)\.jpe?g$
或通过包装特定部分来启用它
在 (?i:
和 )
之间,如下所示:(?i:\.jpe?g)$
。
示例:
(?i)\.jpe?g$
(?i:\.jpe?g)$
/img/([^/]+)(?i:\.jpe?g)$
()
用于捕获路径的一部分。这是文件
基本名称。它将在变量 $1
中可用(1 = 第一组)。
如果您有另一个捕获组,那么您将有第二个
变量,称为 $2
。请参阅此带有 2 个捕获组的示例。[^ ]
表示“不是列表中的字符”。所以 [^/]
的意思是“任何字符
这不是斜杠”。 *
表示 0 或 N 次。但是 +
表示
1 次或 N 次。因此 [^/]+
将匹配文件的基本名称。