我试图用一些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来匹配地图文件中的所有不同的行。
另外,我真的不知道如何使用map文件中的值匹配Condition / Rule。在某些例子中,人们指的是1美元和2美元,而有些则不是。
非常感谢任何帮助
答案 0 :(得分: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]