.htacess mod_rewrite тонкая маршрутизация

#regex #.htaccess #url #mod-rewrite #slim

#регулярное выражение #.htaccess #url #мод-перезапись #тонкая

Вопрос:

У меня есть два вида маршрутов.

Это работает:

 http://localhost/monitor/test1
  

Это не:

 http://localhost/monitor/test2/test3
  

Вот мое текущее правило:

 RewriteRule (^[^/]*$) public/$1 [L]
  

Я знаю, что это соответствует только последней косой черте. Как я могу изменить регулярное выражение, чтобы оно соответствовало обоим случаям?

Комментарии:

1. Не могли бы вы сообщить нам, с http://localhost/monitor/test2/test3 какого URL-адреса вы хотите перенаправить?

2. @RavinderSingh13 я хочу перенаправить на public / test2 / test3

Ответ №1:

1-е решение: не могли бы вы попробовать следующее.

 RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/monitor[^/]*/(.*)$
RewriteRule ^.*$ /public/%1 [NC,L]
  

ИЛИ, если у вас может быть какая-либо другая строка, отличная monitor от REQUEST_URI начальной части, попробуйте выполнить следующее.

 RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^/[^/]*/(.*)$
RewriteRule ^.*$ /public/%1 [NC,L]
  


2-е решение: или мы можем перехватывать значения во время записи RewriteRule и могли бы уменьшить 1 RewriteCond , который используется в 1-м решении здесь.

 RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^[^/]*/(.*)$ /public/$1 [NC,L]
  

ИЛИ с monitor соответствующим ключевым словом:

 RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^monitor[^/]*/(.*)$ /public/$1 [NC,L]
  

Комментарии:

1. Вы мне уже очень помогли, я действительно молодец. Тот, который сработал для меня, является первым, но для записи общедоступный каталог не должен начинаться с косой черты RewriteEngine на RewriteCond %{REQUEST_FILENAME} ! -f перезаписать второй %{REQUEST_FILENAME} ! -d перезаписать второй %{REQUEST_URI} ^/монитор[^/]*/(.*)$ RewriteRule ^.*$ public/%1 [NC,L]

2. @DiegoDieh, добро пожаловать 🙂 Но на самом деле эта косая черта вызовет URI ЗАПРОСА после доменного имени URL-адреса, следовательно, он там присутствовал, рад помочь приветствиям