Мне нужно перенаправить 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 часов.