Это продолжение этого вопроса: Переписать 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