Что не так со мной, перенаправляя регулярное выражение?

#regex #apache #mod-rewrite #redirect

#регулярное выражение #apache #мод-перезапись #перенаправление

Вопрос:

У меня есть 2 перенаправления, и они оба перенаправляют внутренне.

  RewriteEngine on
 RewriteCond %{HTTP_HOST}        ^[^.] .[^.]$
 RewriteRule   ^(. )                        %{HTTP_HOST}$1          [C]
 RewriteRule   ^(.*)/(.*) /var/www/$1/www.$1/$2 #THIS line is not working

 RewriteRule   ^(. )                        %{HTTP_HOST}$1          [C]
 RewriteRule   ^([^.] ).(.*/)(.*) /var/www/$2$1.$2$3
  

я не могу заставить первое работать.
это должно делать:
url: example.org/the/uri/the/user/used
rewriterule должен перенаправить его на: /var/www/example.org/www.example.org/the/uri/the/user/used

Итак, мой вопрос: какое регулярное выражение я ищу?

Редактировать:

Теперь это мой движок 🙂

 <VirtualHost *:80>
        ServerAdmin *@gmail.com
        DocumentRoot /var/www/html

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        RewriteEngine on
        RewriteCond %{HTTP_HOST}                ^[^.] ..[^.] $
        RewriteRule   ^(. )                        %{HTTP_HOST}$1          [C]
        RewriteRule   ^([^/]*)(.*)$            /var/www/$1/www.$1/$2 [L]

        RewriteRule   ^(. )                        %{HTTP_HOST}$1          [C]
        RewriteRule   ^([^.] ).(.*/)(.*) /var/www/$2$1.$2$3 [L]
</VirtualHost>
  

это перенаправление example.org внутренне в /var/www/example.org/www.example.org
и для второй части. он перенаправляет foo.example.org в /var/www/example.org/foo.example.org

Ответ №1:

Ваше регулярное выражение будет,

 ^[^:]*:s*([^/]*)(.*)$
  

Без раздела uri ваше регулярное выражение было бы,

 ^([^/]*)(.*)$
  

ДЕМОНСТРАЦИЯ

Объяснение:

 url: example.org/the/uri/the/user/used
  

В приведенном выше примере строка после : и следующая / записываются в group1. А оставшаяся часть записывается в group2. Ввод /var/www/$1/www.$1$2 части подстановки может дать вам желаемый результат.(Маркер для обозначения захваченной группы может варьироваться в зависимости от языков, которые я использовал $ для представления захваченной группы).

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

1. без URL:. я попытался изменить его, и тестировщик, с которым вы меня связали, также сказал, что он работает нормально. но теперь это не сработает?

Ответ №2:

Я считаю, что это то, что вы ищете:

 RewriteCond   %{HTTP_HOST}  (?:www.)?(.*)
RewriteRule   (.*)          /var/www/%1/www.%1/$1
  

Я протестировал его здесь, и он работает так, как ожидалось: http://htaccess.madewithlove.be /

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

1. Это почти работает! условие перезаписи должно запретить перезапись, если оно начинается с www . Также достаточно странно, что это не сработало. когда я пытаюсь mysite.com он выдал ошибку 404.