Правильно использовать 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]
Другие вопросы по тегам