Подтвердить что ты не робот

Htaccess 301 перенаправить папку, но не вложенные папки

Мне нужно перенаправить из:

http://example.com/folder

to http://example.com/newfolder

Но оставьте:

http://example.com/folder/subfolder

Где это. Это возможно? Кажется, я не могу это сделать, не вызывая кучу перенаправления хаоса.

4b9b3361

Ответ 1

Я просто столкнулся с этим, и вот решение, которое я придумал. Я предпочитаю этот метод, потому что он не перенаправляет какой-либо подкаталог.

RewriteCond %{REQUEST_URI} ^/root-directory[/]?
RewriteCond %{REQUEST_URI} !^/root-directory/+[/]?
RewriteRule (.*) http://www.example.com/ [R=301,L]

Ответ 2

Jestep ответ над перенаправляет "/root-directory", но не перенаправляет "/root-directory/". Это можно устранить и упростить просто:

RewriteCond %{REQUEST_URI} ^/folder/?$
RewriteRule (.*) /newfolder [R=301,L]

Это перенаправит "/folder" и "/folder/", но оставит все подкаталоги в одиночку.

Ответ 3

Может быть:

RewriteEngine On
RewriteCond %{REQUEST_URI} ^/folder[/]?
RewriteCond %{REQUEST_URI} !^/folder/subfolder[/]?
RewriteRule (.*) /newfolder/$1 [R=301,L]

Это должно перенаправить/папку в /newfolder, но оставить/папку/подпапку

Ответ 4

Я пробовал другие методы здесь со смешанным успехом. Я вовсе не эксперт по Apache, но вот простой однострочный вкладыш, который работает каждый раз для меня. Я просто использую RedirectMatch вместо Redirect и включаю очень простой RegEx, чтобы закончить матч в или перед трейлинг-косой чертой, что означает, что подкаталоги никогда не должны квалифицироваться как совпадение.

RedirectMatch 301 ^/folder[/]?$ /newfolder

Ответ 5

Какой сервер вы используете? Вы можете, например, использовать mod_rewrite, если вы используете apache и делаете что-то вроде этого

    RewriteEngine On
    RewriteOptions Inherit
    RedirectMatch permanent ^/folder/$ http://example.com/newfolder
    #I haven't tested the above redirect btw ^ 

и поместите это в файл .htaccess в каталог/folder/(при условии, что вы можете изменить настройки apache, то есть у вас есть опция AllowOverride All на этом виртуальном хосте)

Вот еще информация http://httpd.apache.org/docs/2.0/misc/rewriteguide.html

Ответ 6

Если mod-rewrite не включен или вы не можете использовать директиву RewriteRule на своем сервере, вы можете использовать директиву RedirectMatch модного псевдонима, который является модулем по умолчанию apache httpd server.

RedirectMatch 301 ^/folder/?$ http://example.com/newfolder/ 

Это будет 301 перенаправление /folder/ в /newfolder/.