Назад | Перейти на главную страницу

Проблема с RewriteMap в .htaccess

Мне нужно перенаправить URL-адреса формы subpage.php? Sid = 123 на именованные страницы.

subpagemap.txt существует в корне и содержит только следующие символы, разделенные окончаниями строк Unix \ n:

1 a
2 b
3 c

.Htaccess выглядит следующим образом:

Options +FollowSymlinks
RewriteEngine On
RewriteBase /
RewriteMap subpagemap txt:subpagemap.txt
RewriteCond %{THE_REQUEST} subpage\.php\?sid=([0-9]*)
RewriteRule ^.*$ ${subpagemap:%1|home}? [R=301,L,NC]

Проблема в том, что я получаю 500 Internal Server Error.

Когда я комментирую строку 4 файла .htaccess, строка 5 работает нормально, и меня перенаправляют на карту по умолчанию - / home, которая предполагает, что проблема заключается в файле карты.

Как только я верну строку RewriteMap, я получаю ошибку 500 Internal Server. У меня нет доступа к журналам сервера, и RewriteLog, похоже, вообще не работает.

Я также попробовал следующие замены одну за другой и вместе, чтобы попытаться изолировать проблему:

RewriteMap subpagemap txt:/subpagemap.txt
RewriteCond %{THE_REQUEST} subpage\.php\?sid=([0-9]*)
RewriteRule ^.*$ /${subpagemap:1|home} [R=301,L,NC]

Есть идеи, в чем может быть проблема?

На самом деле, даже если серверы поддерживают это, проблема в том, что вы пытаетесь определить RewriteMap в контексте каждого каталога (например, в файле .htaccess), что недопустимо: http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html#RewriteMap

Переместите определение в конфигурацию сервера или виртуального хоста, и оно должно работать.

Я до сих пор понимаю, что вы, наверное, догадались за полтора года :)

Я обнаружил, что ответ заключался в том, что хост-сервер не поддерживает RewriteMap.

На отладку ушло около 5 часов.