RewriteRule отрицание (НЕ) не работает - PullRequest
0 голосов
/ 04 мая 2018

Я пытаюсь сделать следующее перенаправление:

любой URL, например:

/about/apple/1
/about/green
/about/apples
/about/pears/1

до:

/about/apple

с использованием следующего, который не работает:

RewriteRule ^about/(!apple) /about/apple [R=301,L]

Следующая тестовая строка работает нормально:

RewriteRule ^about/apples /about/apple [R=301,L]

Я пытался:

RewriteRule ^about/!(apple) /about/apple [R=301,L]
RewriteRule ^about/(?!apple) /about/apple [R=301,L]

RewriteCond %{REQUEST_FILENAME} !(about/apple)
RewriteCond %{REQUEST_FILENAME} about(.*)
RewriteRule . /about/apple [R=301,L]

А также пытался перевести его в перезаписываемую секунду, но ничего не работает.

Спасибо.

1 Ответ

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

Ваш шаблон регулярного выражения ^about/(?!apples) не соответствует ни одному из Uris, который вы хотите перенаправить. Он соответствует /about/foobar, но не соответствует /about/apples или /about/apples/foobar, поскольку вы отрицали подстроку apples в шаблоне.

Вы можете использовать

RewriteRule ^about/apples/(.*)$  /about/$1 [L,R]

Это перенаправит /about/apples/ или /about/apples/foobar на /about/foobar.

Обязательно очистите кеш браузера перед проверкой.

...