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.htmlfile1.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.htmlfile1.html:$ 1将是 file1.html除了你必须指定你想要的字符外,这个工作方式与之前的工作方式类似.因此,当您在PHP中检查字符串时,您会知道您获得了哪些字符.就像在我的文件名示例中我必须添加它\.所以它识别点.这个也更快执行.
所以,如果你知道你会得到什么类型的请求,你可以随时使用最后一个,但如果你不确定,你将不得不选择一个更适合你的需求.所有这些之间可能存在更多差异,但理解这些正则表达式的主要目标是了解它们的作用或捕捉.此外,您还需要考虑性能.匹配所有内容然后在PHP或Python中解析请求可能需要更长的时间,而不是简单地匹配它们,只需在脚本中使用它们.
| 归档时间: |
|
| 查看次数: |
7221 次 |
| 最近记录: |