У меня есть старое приложение с URL-адресами вида ...
http://apps.myserver.com/appname/viewItem.akt?p=123
Я заменяю это старое приложение тем, у которого есть URL-адреса вроде ...
http://appname.myserver.com/item/123
Я пробовал добавить несколько разных правил перезаписи в httpd/httpd.conf
и перезапускаю сервер, но я продолжаю получать 404 ошибки.
Я пробовал пару вещей ...
RewriteEngine on
RewriteRule ^.*viewItem.akt\?p=([0-9]*)$ http://appname.myserver.com/item/$1 [R]
Или...
RewriteRule ^/appname/viewItem.akt\?p=([0-9]*)$ http://appname.myserver.com/item/$1 [R]
Результатом всегда будет «Запрошенный URL /appname/viewItem.akt не найден на этом сервере», как если бы правила перезаписи даже не было.
В журнале доступа я получаю ...
[IP address] - - [09/Sep/2011:21:27:37 -0700] "GET /appname/viewItem.akt?p=1018 HTTP/1.0" 404 248
Я проверил все свои регулярные выражения в Рубулярный чтобы убедиться, что они соответствуют входящему запросу.
Что мне не хватает?
Если это актуально, старое приложение было Java-приложением, работающим под Tomcat, и у меня был настроен ProxyPass вот так ...
(Я показываю эти строки закомментированными, как когда я пытаюсь заставить правило перезаписи работать.)
# ProxyPass /appname http://apps.myserver.com:8080/appname
# ProxyPassReverse /appname http://apps.myserver.com:8080/appname
Но это не имеет значения, правда? Пока мое правило перезаписи соответствует запросу, оно должно правильно его отправлять, не так ли?
Попробуй это:
RewriteEngine on
RewriteCond %{QUERY_STRING} ^p=([0-9]+)$
RewriteRule ^appname/viewItem.akt$ http://appname.myserver.com/item/%1? [R,L]
%1
вернуться к ссылке на Rewrite Condition?
в конце подстановки, чтобы удалить оставшуюся часть строки запросаНо похоже ты путаешься mod_rewrite
с участием mod_proxy
. Какая версия Apache у вас установлена?
Не знаю, подходит ли это тебе, но меня это тоже сводит с ума. Я всегда стараюсь максимально упростить.
В моих тестах это работает:
RewriteRule p=([0-9]*)$ http://appname.myserver.com/item/$1
Ты уверен что mod_rewrite
правильно загружается?
В противном случае с помощью директивы RewriteLog с согласно RewriteLogLevel должен помочь вам выяснить, учитывается ли ваше RewriteRule при запросе вашей страницы, и совпадает ли регулярное выражение или нет.