Змінюй хід війни! Допомагай ЗСУ!

Коллеги, вопрос по mod_rewrite

🔴 21:26 Повітряна тривога в Харків.обл.
Статус: Offline
Реєстрація: 25.12.2008
Повідом.: 344
  • 🔴 21:26 Повітряна тривога в Харків.обл.
  • #1
Коллеги, вопрос по mod_rewrite

У мастерхоста стоят ограничения на mod_rewrite выражающиеся в том, что строчка вида

Код:
RewriteRule ^([A-Za-z0-9-\/]+)/$ $1 [R=301]

Вызывает 500, и всё летит к чертям. А она мне нужна для «откусывания» лишнего слэша во введённых ручками URL'ах.

Вопрос.
Конечно можно сделать так, в две строчки:
Код:
RewriteRule ^gallery/([0-9]+)$ /engine/gallery.show.php?galleryID=$1 [L]
RewriteRule ^gallery/([0-9]+)/$ /engine/gallery.show.php?galleryID=$1 [L]

...но уж очень сильно это напоминает говнокод (хвала мастерхосту!). Есть идеи, как сделать красиво в одну строчку?
 
  • 🔴 21:26 Повітряна тривога в Харків.обл.
  • #2
ну можно еще gallery.show.php научить работать с galleryID типа 5/ без ошибок

а как на счет galleryID=abc123 ?
все равно ж проверять входное значение.
 
  • 🔴 21:26 Повітряна тривога в Харків.обл.
  • #3
ну можно еще gallery.show.php научить работать с galleryID типа 5/ без ошибок

а как на счет galleryID=abc123 ?
все равно ж проверять входное значение.

Ну это-то да, понятно. Но всё же хотелось обойтись изящной строчкой, откусывающей последний слэш на уровне реврайта. А парсить-то $_GET потом и проверять всё равно надо, так что это альтернативный вариант.
 
  • 🔴 21:26 Повітряна тривога в Харків.обл.
  • #4
Код:
RewriteRule ^([A-Za-z0-9-\/]+)?/$ $1 [R=301]

Код:
RewriteRule ^gallery/([0-9]+)?/$ /engine/gallery.show.php?galleryID=$1 [L]

?
 
  • 🔴 21:26 Повітряна тривога в Харків.обл.
  • #5

Код:
RewriteRule ^([A-Za-z0-9-\/]+)/$ $1 [R=301]

Это стоит над остальными правилами — перед всеми остальными реврайтами откусывает лишний «/» если он в URL есть. И уже после этого можно спокойно юзать такой реврайт:

Код:
RewriteRule ^gallery/([0-9]+)$ /engine/gallery.show.php?galleryID=$1 [L]

Он один. А вот если отключить первую строку — то приходится писать две строчки, чтобы обрабатывать и те случаи, когда URL вида /gallery/876876 и вида /gallery/32442

Код:
RewriteRule ^gallery/([0-9]+)$ /engine/gallery.show.php?galleryID=$1 [L]
RewriteRule ^gallery/([0-9]+)/$ /engine/gallery.show.php?galleryID=$1 [L]

Некрасиво, взгляд царапает.
 
  • 🔴 21:26 Повітряна тривога в Харків.обл.
  • #6
ну так RewriteRule ^gallery/([0-9]+)?/$ должно "есть" и 456 и 456/
 
  • 🔴 21:26 Повітряна тривога в Харків.обл.
  • #7
О, действительно. Спасибо, вопрос исчерпан.

UPDATE.
Хехе, ни фига. Мастерхосту на подобные штуки пофиг. В результате вот этого реврайта

Код:
RewriteRule ^gallery/([0-9]+)?/$ /engine/gallery.show.php?galleryID=$1 [L]

получаем стабильный 404 на оба адреса, что c / что без. )
 
  • 🔴 21:26 Повітряна тривога в Харків.обл.
  • #8
а двумя строчками работает?
ну тогда оставьте 2 строчки. или меняйте хостинг :)
 
  • 🔴 21:26 Повітряна тривога в Харків.обл.
  • #9
Двумя строчками прекрасно всё работает.

Везде, что характерно, работает всё правильно. (писал, отлаживал и показывал я клиенту, а потом он данные переносил, на своём собственном хостинге, чтобы минимализировать «провисания» по времени апгрейда). А хостинг клиента, у меня собственные VPS'ки, клиенту я и так уже показываю-показываю, что у моих VPS'ок в Литве скорость отдачи сайта в три раза больше, чем у его мастерхоста в его же Москве, он говорит «даааа, надо подумать». И продолжает сидеть на мастерхосте.

Понаворотили mod_security и посадили баранов в техподдержку. Что мастерхост, что свеб питерский. Ох. (Извините, наболело).
 
Назад
Зверху Знизу