Отработав часы для поиска решения, но я почти ничего не знаю о htaccess и перенаправлениях.
Мой вопрос: как перенаправить определенные части URL-адреса и игнорировать других?
например, http://www.example.com/foo
перенаправление на http://www.example.com/
и http://www.example.com/foo/bar
остается как есть.
Заранее спасибо!
Удивительно видеть так много неправильного ответа здесь. Вам просто нужно точное регулярное выражение для цели /foo
здесь с необязательной косой чертой.
Это правило можно использовать в файле DOCUMENT_ROOT/.htaccess
:
RedirectMatch 302 ^/foo/?$ /
Попробуйте следующее:
RewriteRule ^foo$ http://www.%{HTTP_HOST}/ [R=301,L]
Вы можете сделать это с помощью файла.htaccess:
Redirect 301 /foo http://www.example.com
Для получения дополнительной информации о.htaccess проверьте этот turorial.
Это звучит, как если вам нужно какое-то обобщенное решение. Если это так, вы можете использовать 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
) правилом перенаправления применимым - в противном случае применение дополнительных правил может привести к другому результату.