mod_rewrite и rewritecond - PullRequest
       1

mod_rewrite и rewritecond

0 голосов
/ 07 сентября 2011

Я пытаюсь запустить перезапись на основе условия в URI. Таким образом, если URI имеет строку и не содержит другой строки, выполните перенаправление. У меня сейчас ошибка, но мне нужна помощь, чтобы она заработала.

RewriteCond %{REQUEST_URI} (.*)usb-3-hard-drive(.*) [NC]

RewriteCond %{REQUEST_URI} !(*)start$

RewriteRule .* /en/manuals/usb-3-hard-drive/start [L]

URL запроса: http://www.domain.tld/dir1/usb-3-hard-drive/*

Новый URL: http://www.domain.tld/dir1/usb-3-hard-drive/start

Конечно, если условия не совпадают, последующие переписывания все равно должны выполняться.

спасибо ...

1 Ответ

3 голосов
/ 08 сентября 2011

Что за ошибка?Вы должны заглянуть в журнал ошибок Apache для подробного сообщения об ошибке.

В любом случае - я подозреваю, что Apache жалуется на неправильный синтаксис регулярных выражений .Если это не опечатка при копировании-вставке (как-то), то ошибка здесь: !(*)start$ - нет такой вещи, как *, - вы пропустили точку . перед ней -Скорее всего, вы имели в виду !(.*)start$.

Здесь более оптимизировано и полностью работает правило:

RewriteCond %{REQUEST_URI} /usb-3-hard-drive/ [NC]
RewriteCond %{REQUEST_URI} !/start$
RewriteRule .* /en/manuals/usb-3-hard-drive/start [L]

BTW - это не "выполнить перенаправление", как вы упомянули - перезапись без вывода сообщений (внутренняя переадресация) происходит только тогда, когда URL-адрес остается неизменным в браузере.Если вы хотите иметь правильное перенаправление (код 3xx) при изменении URL в адресной строке браузера, добавьте ,R=301 (или любой другой код перенаправления, который вы предпочитаете) рядом с [L], то есть [L,R=301].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...