Apache переписать карту с двумя возможностями сопоставления с одним URL? - PullRequest
0 голосов
/ 05 ноября 2018

Я должен переписать URL, которые выглядят так: /foo/bar/xyz/ до /abc/

Но я также должен переписать несколько разных URL-адресов для одного и того же места назначения, например так: /foo/xyz/ до /abc/

Я создал карту, которая выглядит следующим образом: xyz/ /abc/

И такие правила:

RewriteMap rewrites txt:/path/to/rewritemap.txt
RewriteCond %{REQUEST_URI} ^/foo/.*
RewriteRule ^/foo/(.*) ${rewrites:$1} [R=301,L]
RewriteCond %{REQUEST_URI} ^/foo/bar/.*
RewriteRule ^/foo/bar/(.*) ${rewrites:$1} [R=301,L]

Однако второй (foo/bar) работает, только если я закомментирую первый (только foo). Понятия не имею, что я здесь делаю не так.

(Единственное решение, которое я могу придумать, - это удвоить количество совпадающих URL в моем файле карты, но это неэффективно)

1 Ответ

0 голосов
/ 06 ноября 2018

Apache будет обрабатывать правила перезаписи, так сказать, в порядке сложности. Чтобы заставить его обрабатывать несколько шаблонов так, как вы хотите, вы должны добавить их в порядке от наиболее конкретного к наименее конкретному.

В вашем случае вам просто нужно изменить два условия в конфигах:

RewriteMap rewrites txt:/path/to/rewritemap.txt

# Most specific first
RewriteCond %{REQUEST_URI} ^/foo/bar/.*
RewriteRule ^/foo/bar/(.*) ${rewrites:$1} [R=301,L]

# Least specific (wildcard) last
RewriteCond %{REQUEST_URI} ^/foo/.*
RewriteRule ^/foo/(.*) ${rewrites:$1} [R=301,L]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...