папка перенаправления htaccess 301, но не подпапки - PullRequest
17 голосов
/ 26 октября 2011

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

http://example.com/folder

до http://example.com/newfolder

Но оставить:

http://example.com/folder/subfolder

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

Ответы [ 6 ]

29 голосов
/ 18 июля 2013

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

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

Это перенаправит «/ folder» и «/ folder /», но оставит все подкаталоги в покое.

3 голосов
/ 05 ноября 2017

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

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

3 голосов
/ 06 февраля 2013

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

RewriteCond %{REQUEST_URI} ^/root-directory[/]?
RewriteCond %{REQUEST_URI} !^/root-directory/+[/]?
RewriteRule (.*) http://www.example.com/ [R=301,L]
3 голосов
/ 26 октября 2011

Может быть:

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

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

1 голос
/ 26 октября 2011

Какой сервер вы используете?Например, вы можете использовать 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, то есть у вас естьoption AllowOverride All в этом виртуальном хосте)

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

0 голосов
/ 11 мая 2018

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

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

301 перенаправит /folder/ на /newfolder/.

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