Правильно использовать Apache RewriteCond и RewriteRule при использовании RewriteMap?
Я пытаюсь отладить проблему с некоторыми настройками Apache, но я не могу заставить переписать Apache для работы при использовании RewriteMap.
это содержимое внутри /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
Я попробовал почти все варианты, которые я нашел на форумах / в Google, но ни один из них не смог заставить работать мои RewriteCond и RewriteRule.
я не знаю правильную настройку внутри моего виртуального хоста:
RewriteEngine on
RewriteMap map "/etc/apache2/map.txt"
RewriteCond ???????
RewriteRule ???????
Я не совсем уверен, но я думаю, что я должен иметь несколько RewriteCond и RewriteRule, чтобы соответствовать всем этим различным линиям из файла карты.
Также я действительно не понимаю, как сопоставить Условие / Правило, используя значения из файла карты. В некоторых примерах люди ссылаются на $1 и $2, а некоторые нет.
Любая помощь очень ценится
1 ответ
Вот условия / правила, которые заставляют вещи работать:
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]