#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.