Как динамически перенаправить определенные подкаталоги на основе шаблона URL?

0

Отработав часы для поиска решения, но я почти ничего не знаю о htaccess и перенаправлениях.

Мой вопрос: как перенаправить определенные части URL-адреса и игнорировать других?

например, http://www.example.com/foo перенаправление на http://www.example.com/ и http://www.example.com/foo/bar остается как есть.

Заранее спасибо!

Теги:
.htaccess
redirect

4 ответа

0

Удивительно видеть так много неправильного ответа здесь. Вам просто нужно точное регулярное выражение для цели /foo здесь с необязательной косой чертой.

Это правило можно использовать в файле DOCUMENT_ROOT/.htaccess:

RedirectMatch 302 ^/foo/?$ /
0

Попробуйте следующее:

RewriteRule ^foo$ http://www.%{HTTP_HOST}/ [R=301,L]
0

Вы можете сделать это с помощью файла.htaccess:

Redirect 301 /foo http://www.example.com

Для получения дополнительной информации о.htaccess проверьте этот turorial.

0

Это звучит, как если вам нужно какое-то обобщенное решение. Если это так, вы можете использовать mod_rewrite для этого, если модуль установлен и включен для вашего apache или у вас есть доступ к apache самостоятельно.

Это намного мощнее, чем простые переадресации, но гораздо легче стрелять в ногу.

Он работает с Условиями и Правилами для переписывания URL-адресов на основе регулярных выражений.

Для перенаправления только (и точно)/foo вы определяете:

 RewriteRule ^/foo$        http://www.example.com

Это сохранит что-нибудь ниже foo нетронутым, даже /foo/index.html.

Чтобы перенаправить что-либо ниже foo, это не содержит панель подкаталогов или некоторые другие подкаталоги, это будет выглядеть так:

RewriteCond %{REQUEST_URI}    !^/foo/(bar|whatever|subdirectories)/
RewriteRule ^/foo(.*)         http://www.example.com/$1      [R=301,L]

RewriteCond проверяет, не найдены ли указанные каталоги в REQUEST_URI и применяется общее перенаправление чего-либо ниже foo, если это так; $1 содержит то, что фиксируется регулярным выражением внутри круглых скобок (.*).

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

См. Http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню