0

我试图调试一些 apache 配置的问题,但是在使用 RewriteMap 时我无法让 apache 重写工作。

这是 /etc/apache2/map.txt 里面的内容

/21.html /1.html
/22.html www.localhost/2.html
www.localhost/23.html www.localhost/3.html
/23.html?blabla=bla /4.html

为了测试这一点,我提供了几个带有小脚本的 html 页面:

#!/bin/bash

COUNTER=1

while [  $COUNTER -lt 20 ]; do
echo "<html>
<body>

<h1>PAGE NR $COUNTER</h1>

<p>My first paragraph.</p>

</body>
</html>" > /var/www/$COUNTER.html
let COUNTER=COUNTER+1 
done

我几乎尝试了在论坛/谷歌中找到的所有变体,但没有一个可以使我的 RewriteCond 和 RewriteRule 工作。

我不知道我的虚拟主机中的正确设置:

RewriteEngine on
RewriteMap map "/etc/apache2/map.txt"
RewriteCond ???????
RewriteRule ???????

我不太确定,但我认为我应该有多个 RewriteCond 和 RewriteRule 来匹配地图文件中所有这些不同的行。

另外我真的不知道如何使用地图文件中的值来匹配条件/规则。在某些示例中,人们指的是 1 美元和 2 美元,而有些则不是。

非常感谢任何帮助

4

1 回答 1

0

这些是使事情起作用的条件/规则:

RewriteCond  %{REQUEST_URI}                 ^(/.*[^/])/?$
RewriteCond  %{QUERY_STRING}        !.+
RewriteCond  ${map:${lc:%1}|NOT_FOUND}    !NOT_FOUND
RewriteRule  .+  ${map:${lc:%1}}?                   [NC,L,R]

RewriteCond  %{REQUEST_URI}                 ^(/.*[^/])/?$
RewriteCond  %{QUERY_STRING}        ^.+
RewriteCond  ${map:${lc:%{REQUEST_URI}?%{QUERY_STRING}}|NOT_FOUND} !NOT_FOUND
RewriteRule  .+ ${map:${lc:%{REQUEST_URI}?%{QUERY_STRING}}} [NC,L,R]
于 2017-04-26T14:18:53.567 回答