获取 htaccess 文件中的子字符串
Get substring in htaccess file
我在制作 htaccess 文件时遇到问题。我有一个像这样的 URI :
http://www.exemple.com/?fileName=fileName&otherString=otherString
我想执行这样的命令:
<If "file('fileName') !~ /otherString/">
# do something
</If>
是否可以从 URI 中获取 fileName 和 otherString ?
是否可以使用正则表达式获取 %{QUERY_STRING}
子字符串?或其他?
提前致谢。
编辑:
我不想重写 URI(暂时)。 URI 包含文本文件的名称 ("fileName") 和此文件中的信息 ("otherString")。我想访问此文件并验证信息是否存在其中。如果是这样,做我想做的事。
我有这两个正则表达式:
/\?file\=(.*)\&/
/\&otherString\=(.*)$/
在URI中隔离了我想要的两个部分。但我不知道如何使用它(如果可能的话)将 URI 的一部分作为字符串获取和操作。
Apache 不是最好的工具。
您可以使用 %{QUERY_STRING} =~ /(?:^|&)fileName=([^&]+)&otherString=([^&]+)/
等正则表达式从查询字符串中提取所需的参数值。 fileName 的值可以使用反向引用变量 </code> 检索,对于 <em>otherString</em>,<code>
.
但您似乎不能在正则表达式中重复使用反向引用变量。
因此,对于完全匹配:
<If "%{QUERY_STRING} =~ /(?:^|&)fileName=([^&]+)&otherString=([^&]+)/ && file(%{DOCUMENT_ROOT} . '/' . ) == ">
(将 ==
更改为 !=
不匹配)
如果可以在文件中的任何位置找到该字符串,我能找到的最好的是:
<If "%{QUERY_STRING} =~ /(?:^|&)fileName=([^&]+)&otherString=([^&]+)/ && file(%{DOCUMENT_ROOT} . '/' . ) -strmatch '**'">
(在file(
之前添加!
作为其否定)
在其他两个测试之间添加类似 && -s %{DOCUMENT_ROOT} . '/' .
的测试可能是个好主意,以避免错误日志中出现一些无用的噪音。
我在制作 htaccess 文件时遇到问题。我有一个像这样的 URI :
http://www.exemple.com/?fileName=fileName&otherString=otherString
我想执行这样的命令:
<If "file('fileName') !~ /otherString/">
# do something
</If>
是否可以从 URI 中获取 fileName 和 otherString ?
是否可以使用正则表达式获取 %{QUERY_STRING}
子字符串?或其他?
提前致谢。
编辑:
我不想重写 URI(暂时)。 URI 包含文本文件的名称 ("fileName") 和此文件中的信息 ("otherString")。我想访问此文件并验证信息是否存在其中。如果是这样,做我想做的事。
我有这两个正则表达式:
/\?file\=(.*)\&/
/\&otherString\=(.*)$/
在URI中隔离了我想要的两个部分。但我不知道如何使用它(如果可能的话)将 URI 的一部分作为字符串获取和操作。
Apache 不是最好的工具。
您可以使用 %{QUERY_STRING} =~ /(?:^|&)fileName=([^&]+)&otherString=([^&]+)/
等正则表达式从查询字符串中提取所需的参数值。 fileName 的值可以使用反向引用变量 </code> 检索,对于 <em>otherString</em>,<code>
.
但您似乎不能在正则表达式中重复使用反向引用变量。
因此,对于完全匹配:
<If "%{QUERY_STRING} =~ /(?:^|&)fileName=([^&]+)&otherString=([^&]+)/ && file(%{DOCUMENT_ROOT} . '/' . ) == ">
(将 ==
更改为 !=
不匹配)
如果可以在文件中的任何位置找到该字符串,我能找到的最好的是:
<If "%{QUERY_STRING} =~ /(?:^|&)fileName=([^&]+)&otherString=([^&]+)/ && file(%{DOCUMENT_ROOT} . '/' . ) -strmatch '**'">
(在file(
之前添加!
作为其否定)
在其他两个测试之间添加类似 && -s %{DOCUMENT_ROOT} . '/' .
的测试可能是个好主意,以避免错误日志中出现一些无用的噪音。