правила перезаписи htaccess не работают с URL-адресами, которые заканчиваются на .cfm

#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, как вы заметили, это должно быть вызвано чем-то другим. Правило, которое я предоставил, должно работать.