/ / mod_rewrite nie pasuje do ostatniego dopasowania - regex, mod-rewrite

mod_rewrite nie pasuje do ostatniego meczu - regex, mod-rewrite

Wprowadź adres URL: application.local/v2/en-us/login

Oczekiwany adres wyjściowy: application.local/app_dev.php/en-us/login

Jedyną różnicą jest to, że zastępujemy /v2/ z /app_dev.php. Oto moja zasada przepisywania.

RewriteRule ^/(v2)?/(([A-Za-z]+-[A-Za-z]+)|_(.*)+)?/(.*)+?$ /app_dev.php/$2/$3 [R,L]

W mojej logice chodzi:

  • Mecz /v2/ (wchodzi w to $1) lub _profiler, _wdt itp., których używa Symfony
  • Dopasuj ustawienia regionalne (dotyczy to $2)
  • Dopasuj rzecz po, w tym przypadku: login (to wchodzi $3)

Jednak, $3 nie zawiera login zgodnie z oczekiwaniami otrzymuję:

application.local/app_dev.php/en-us/en-us

Chociaż mam zamiennik /v2/ i /app_dev.php pracując, myślę, że popsuję mecz pomiędzy $2 i $3 gdzieś po login. Co ja robię źle?

Odpowiedzi:

4 dla odpowiedzi № 1
^/(v2)?/(([A-Za-z]+-[A-Za-z]+)|_(.*)+)?/(.*)+?$
||||  ||||||||||||||||||||||||||||||  ||||
1111  2|||||||||||||||||||||22||||22  5555
333333333333333333333  4444

Masz wewnętrzne grupy, które się liczą. Dodałem liczby, abyś mógł je łatwo zobaczyć.

To powinno działać:

RewriteRule ^/(v2)?/(([A-Za-z]+-[A-Za-z]+)|_(.*)+)?/(.*)+?$ /app_dev.php/$2/$5 [R,L]

Zamiast używać skomplikowanego wyrażenia regularnego, możesz po prostu przekierować wszystko.

RewriteRule ^/v2/(.*)$ /app_dev.php/$1 [R,L]