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

mod_rewrite RewriteRule не работает

Это продолжение этого вопроса: Переписать URL - как получить имя хоста и путь?
И копия этого: mod_rewrite RewriteRule не работает

У меня есть это правило перезаписи:

RewriteEngine On
RewriteRule ^(http://[-A-Za-z0-9+&@#/%=~_|!:,.;]*)/([-A-Za-z0-9+&@#/%=~_|!:,.;]*)\?([A-Za-z0-9+&@#/%=~_|!:,.;]*)$ http://www.xmldomain.com/bla/$2?$3&rtype=xslt&xsl=$1/$2.xsl

вроде правильно, и именно то, что мне нужно. Но на моем сервере это не работает. Я получаю ошибку 404 страница не найдена.

mod_rewrite включен, так как следующее простое правило работает нормально:

 RewriteEngine On
 RewriteRule ^page/([^/\.]+)/?$ index.php?page=$1 [L]

Вы можете помочь?

Спасибо

Согласно документации по умолчанию

Первоначально шаблон будет сопоставляться с частью URL-адреса после имени хоста и порта, но перед строкой запроса. Если вы хотите сопоставить имя хоста, порт или строку запроса, используйте RewriteCond с переменными% {HTTP_HOST},% {SERVER_PORT} или% {QUERY_STRING} соответственно.

Таким образом, вы не можете извлечь имя хоста или строку запроса таким образом. Самый простой способ - использовать %{HTTP_HOST} и %{QUERY_STRING} серверные переменные в правиле перезаписи:

RewriteRule ^/(.*)$ http://www.xmldomain.com/bla/$1?%{QUERY_STRING}&rtype=xslt&xsl=%{HTTP_HOST}/$1.xsl

РЕДАКТИРОВАТЬ

Если вы хотите проверить полный URL-адрес, вы можете использовать RewriteCond вот так (обратите внимание на % знак вместо $ войдите в правило перезаписи):

RewriteCond %{HTTP_HOST}/%{REQUEST_URI}&%{QUERY_STRING} ...pattern...
RewriteRule . http://www.xmldomain.com/bla/%2?%3&rtype=xslt&xsl=%1/%2.xsl