Ответ на первую часть вопроса должна быть такой :
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/? $2/$3 [R=301,L]
Второй код, который вы пробовали, противоположно тому, что вы просите вначале. Эта линия соответствует ничего не начиная с /test/
:
RewriteCond %{REQUEST_URI} !^/test/.*$
Эта линия говорит взять все и переписать его в /test/
каталоге:
RewriteRule ^(.*)$ /test/$1 [L]
Так вместе что-нибудь, что не в тестовом каталоге перезаписывается в тестовый каталог.
Если вы пытаетесь специально удалить тест слова, вы должны удалить символ !
в попытке создать совпадение. Поскольку вы уже знаете, что это называется test
, нет необходимости даже заставлять Apache выполнять этот поиск для «теста», потому что Apache handles the RewriteCond statement after the RewriteRule (скорее, неинтуитивно).
RewriteCond %{REQUEST_URI} ^/?test
Вы можете специализировать правила перезаписи, как это (я добавил [QSA]
, чтобы все строки запроса:
RewriteRule ^test/([^/]+)/([^/]+)/? $1/$2/ [R=301,L,QSA]
Это делает работу по на http://htaccess.madewithlove.be/, но он не работает на моем сайте. Я собираюсь продолжить исследование и задать новый вопрос – user61629