#apache #.htaccess #mod-rewrite #redirect #railo
#apache #.htaccess #mod-перезапись #перенаправление #railo
Вопрос:
Я работаю над тем, чтобы сделать все мои URL-адреса короче с помощью 301 перенаправления. Я исправил почти все из них, однако есть URL-адрес, заканчивающийся на .cfm, который не будет перезаписываться.
FROM: http://www.mydomain.com/index.cfm/catlink/17/pagelink/7/sublink/34/art/41/rec/1/page.cfm
TO: http://www.mydomain.com/story/resources/health/page/168/page.html
Если я изменю /page.cfm
на /page.html
, перезапись будет работать.
Вот правило перезаписи, которое работает для других моих URL-адресов
RewriteRule ^index.cfm/catlink/([a-zA-Z0-9/-] )([/])pagelink/([a-zA-Z0-9/-] )([/])sublink/([a-zA-Z0-9/-] )([/])art/([a-zA-Z0-9/-] )(.*)$
http://localhost/index.cfm?page=movedamp;cat=$3amp;subcat=$5amp;article=$7amp;story=$8 [R=301]
Почему это работает, когда URL-адрес заканчивается на .html, но не когда он заканчивается на .cfm? Что я делаю не так?
Это текущая ссылка и не будет работать:
http://www.mydomain.com/index.cfm/catlink/17/pagelink/7/sublink/34/art/41/rec/1/page.cfm
Если я вручную изменю его конец на .html, я смогу заставить его работать:
http://www.mydomain.com/index.cfm/catlink/17/pagelink/7/sublink/34/art/41/rec/1/page.html
Комментарии:
1. Покажите две ссылки, которые вы пытаетесь использовать. Это то, какая
html
ссылка проходит, а какаяcfm
ссылка завершается ошибкой.2. Я добавил, как я могу изменить ссылку, чтобы она работала. Просто посмотрите на конец URL-адресов.
3. Ваше регулярное выражение довольно свободно. Я думаю, что это ваша основная причина. Все ли вы записываете цифры?
4. Теперь, когда вы упомянули об этом, я думаю, что да. Когда я впервые начал изучать перезаписи, это сработало, поэтому я не потратил время на то, чтобы научиться его оптимизировать. Думаю, мне придется узнать об этом больше.
5. Чтобы ответить на Toby, я проверил эту проблему, создав файл htaccess без каких-либо других перезаписей, но возникает одна и та же проблема.
Ответ №1:
Проблема в том, что Apache httpd передает его в Tomcat, прежде чем Apache просмотрит .htaccess . Чтобы проверить это, переместите правила перезаписи на ваш виртуальный хостинг. Если они работают, то в этом и заключалась проблема.
Комментарии:
1. Да, мы сузили круг поисков до этой проблемы. Есть ли другой способ добиться этого без изменения файлов сервера при каждой перезаписи?
2. Джордан Майкл из сообщества Railo работает над собственным соединителем с именем mod_cfml — я полагаю, он учитывает это — Следите за обновлениями в списке рассылки Railo. В противном случае я не совсем уверен, как вы это обойдете, поскольку это проблема mod_jk / ajp / timing в apache.
Ответ №2:
Прежде всего, измените первую часть вашего RewriteRule на следующее, более краткое выражение:
^index.cfm/catlink/(d )/pagelink/(d )/sublink/(d )/art/(d )/(.*)$
Я считаю, что это само по себе может решить проблему. Однако, если это не так, и остальная часть URL-адреса вас не волнует, попробуйте выполнить следующее:
^index.cfm/catlink/(d )/pagelink/(d )/sublink/(d )/art/(d )/
Примечание: это удаляет привязку ( $
) и, следовательно, позволяет URL-адресу быть открытым.
Комментарии:
1. ваша перезапись работает хорошо, если запрошенный URL заканчивается чем-либо, кроме
.cfm
, что, я не думаю, имеет какое-либо отношение к этому правилу.2. @Kevin B, как вы заметили, это должно быть вызвано чем-то другим. Правило, которое я предоставил, должно работать.