获取 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} . '/' . 的测试可能是个好主意,以避免错误日志中出现一些无用的噪音。