Mag*_*gie 14 regex apache .htaccess mod-rewrite
我的.htaccess中有一堆规则(子域,文件夹,用户特定文件夹等...)
我正在使用这个正则表达式:
([a-z0-9A-Z])
我正在寻找一个特定的规则,我找到了多种方法来构建它,我想知道这些是否有标准的做法?使用类似的东西有什么区别/利弊?
([^.]+)
([^/]+)
(.*)
([a-z0-9]+)
Boo*_*eus 33
假设我们有这个.htaccess:
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?request=$1 [L]
Run Code Online (Sandbox Code Playgroud)
您问题中提到的表达式将具有以下逻辑:
^(.*)$
.
:匹配任何字符和任何单个字符*
:匹配前一个符号的零个或多个基本上它会匹配以下任何东西:
folder1/file1.html
:1美元会 folder1/file1.html
file1.html
:$ 1将是 file1.html
这样,很容易用PHP或Python解析整个请求.另一方面,您不会过滤URL中必须在脚本中验证的任何不需要的字符.
例:
=@*-+
([^.] +)
[]
:匹配方括号内的任何符号[^]
:匹配大括号(ref)中列出的字符以外的任何字符.+
:匹配前一个符号中的一个或多个[^.]
:匹配除.
角色以外的任何东西.在.
找到角色时会停止匹配来自参考.
字符类中唯一的特殊字符或元字符是右括号(]),反斜杠(),插入符号(^)和连字符( - ).通常的元字符是字符类中的普通字符,不需要通过反斜杠进行转义.要搜索星号或加号,请使用[+*].如果你逃避字符类中的常规元字符,你的正则表达式将正常工作,但这样做会显着降低可读性.
基本上它会匹配以下任何东西:
folder1/file1.html
:1美元会 folder1/file1
file1.html
:$ 1将是 file1
这与第一个效果相同,除了这个点之后的所有内容 .
^([^ /] +)$
[]
:匹配方括号内的任何符号+
:匹配前一个符号中的一个或多个^
:匹配字符串的开头[^/]
:匹配除/
角色以外的任何东西.在/
找到角色时会停止匹配这与第一个效果相同,除了这将检查任何请求/
.因此,如果您有多个文件夹,则必须多次包含此正则表达式.
基本上它会匹配任何东西(如果你只有一套):
folder1/file1.html
:1美元会 folder1
file1.html
:$ 1将是 file1.html
如果你有2:
folder1/file1.html
:$ 1将folder1
和$ 2匹配file1.html
file1.html
:$ 1将是 file1.html
您拥有的文件夹越多,您可能需要添加的规则就越多.
^([a-z0-9] +)$ [ ^([a-z0-9.] +)$这个例子]
[]
:匹配方括号内的任何符号+
:匹配前一个符号中的一个或多个a-z
:匹配从a到z的字母0-9
:匹配0-9之间的数字(你也可以使用\ d或\ w)
基本上它会匹配任何东西(如果你只有一组 - 添加点):
folder1/file1.html
:1美元会 folder1
file1.html
:$ 1将是 file1.html
如果你有2:
folder1/file1.html
:$ 1将folder1
和$ 2匹配file1.html
file1.html
:$ 1将是 file1.html
除了你必须指定你想要的字符外,这个工作方式与之前的工作方式类似.因此,当您在PHP中检查字符串时,您会知道您获得了哪些字符.就像在我的文件名示例中我必须添加它\.
所以它识别点.这个也更快执行.
所以,如果你知道你会得到什么类型的请求,你可以随时使用最后一个,但如果你不确定,你将不得不选择一个更适合你的需求.所有这些之间可能存在更多差异,但理解这些正则表达式的主要目标是了解它们的作用或捕捉.此外,您还需要考虑性能.匹配所有内容然后在PHP或Python中解析请求可能需要更长的时间,而不是简单地匹配它们,只需在脚本中使用它们.
归档时间: |
|
查看次数: |
7221 次 |
最近记录: |