301Прямой, чтобы удалить папку из URL

Я имею:

mydomain.com/folder-name/segment1/segment2

Я хочу изменить это на:

mydomain.com/segment1/segment2

используя 301 редирект.

Я пробовал:

RewriteCond %{REQUEST_URI} !^/test/.*$
RewriteRule ^(.*)$  /test/$1 [L]

но это не работает

вот мой файл htacess:

# #AddHandler application/x-httpd-php53 .php .php5 .php4 .php3

RewriteEngine on
RewriteBase /


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

2 ответа

Просто измените свой код на:

RewriteRule ^test/(.*)$ /$1 [R=301,L,NC]

Ответ на первую часть вопроса должен быть таким:

RewriteRule ^([^/]+)/([^/]+)/([^/]+)/? $2/$3 [R=301,L]

Второй код, который вы пробовали, противоположен тому, что вы просили изначально. Эта строка соответствует всему, что не начинается с /test/:

RewriteCond %{REQUEST_URI} !^/test/.*$

Эта строка говорит, что возьми все и перепиши это /test/ каталог:

RewriteRule ^(.*)$  /test/$1 [L]

Таким образом, все, что не находится в тестовом каталоге, переписывается в тестовый каталог.

Если вы пытаетесь удалить слово test, то удалите ! символ в вашей попытке создать совпадение. Так как вы уже знаете, это называется test нет необходимости даже заставлять Apache выполнять этот поиск для "теста", потому что Apache обрабатывает инструкцию RewriteCond после RewriteRule (довольно неинтуитивно).

RewriteCond %{REQUEST_URI} ^/?test

Вы можете специализировать правило перезаписи следующим образом (я добавил [QSA] поймать любые строки запроса:

RewriteRule ^test/([^/]+)/([^/]+)/? $1/$2/ [R=301,L,QSA]
Другие вопросы по тегам