Назад | Перейти на главную страницу

RewriteRule влияет только на первый сегмент

У меня есть следующее RewriteRule. Это переписывает все, что начинается с mac, linux или windows:

RewriteCond $1 ^(mac|linux|windows) [NC]
RewriteRule ^(.*)$ /index.php/site/index/$1 [L]

К сожалению, это также переписывает /mac/test/testing. Как я могу предотвратить его применение, если после /mac?

Итак, я нашел решение:

RewriteCond $1 ^(linux|mac|windows)($|\/)$ [NC]
RewriteRule ^(.*)$ /index.php/site/index/$1 [L]

RewriteCond $1 ^(linux|mac|windows)/category/(.*)$ [NC]
RewriteRule ^(.*)$ /index.php/site/category/$1 [L]

RewriteCond $1 ^(app|download)/(.*)$ [NC]
RewriteRule ^(.*)$ /index.php/site/$1 [L]

Обратите внимание $ подпишите в конце первой строки. Я не уверен ($|\/) - правильный способ сделать косую черту в конце необязательной, но он работает. Любой совет?

Изменить: на самом деле существует более простой способ обработки конечной косой черты.

RewriteCond $1 ^(linux|mac|windows)/?$ [NC]
RewriteRule ^(.*)$ /index.php/site/index/$1 [L]