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