Назад | Перейти на главную страницу

Apache: правило перезаписи, чтобы удалить косую черту из постоянной ссылки?

я видел этот предыдущий вопрос о ServerFault, и я хочу что-то похожее, но я не знаю, как этого добиться.

Я хочу убрать все косые черты из постоянной ссылки, кроме той, которая идет после доменного имени. Например:

http://www.muycomputerpro.com/Actualidad/Especiales/La-Ciudad-Eficiente-Netapp

будет перенаправлен на

http://www.muycomputerpro.com/ActualidadEspecialesLa-Ciudad-Eficiente-Netapp

Мне нужно это исправить некоторые ошибки 404, оставшиеся в моем блоге WordPress под апачем веб сервер. Итак, какое было бы правильное правило перезаписи?

Поскольку RewriteRule начинается с пути (поэтому нам не нужно беспокоиться о домене), вы можете сказать, что хотите удалить все косые черты, кроме первого, или удалить косую черту, если перед ней не стоит начало строка.

Что в регулярном выражении означает использование отрицательного просмотра назад, например:

(?<!^)/

Где (?<!...) - синтаксис отрицательного просмотра назад и ^ означает начало строки.

Итак, в конфиге это будет выглядеть так:

RewriteRule (?<!^)/ $1 [L,R=301]

Одна вещь, о которой можно догадаться, - это $1 для представления пустой строки - я не делал этого раньше с mod_rewrite, и я не смог найти ничего, объясняющего, существует ли «правильный» способ замены пустой строкой, но в других механизмах регулярных выражений использование неиспользуемой обратной ссылки приведет к в пустой строке, так что все должно быть в порядке. (Если нет, я посмотрю, "" работал вместо этого.)

О, и [...] part - это список параметров перезаписи, разделенных запятыми. В L для последнего - сказать не обрабатывать дальнейшие правила (обычно это желаемое поведение) и R=301 - это 301 (постоянное) перенаправление (указание паукам обновить свои записи новым URL-адресом). Подробнее о варианты перезаписи здесь.