я видел этот предыдущий вопрос о 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-адресом). Подробнее о варианты перезаписи здесь.