Переписать мод htaccess - как создать виртуальный поддомен?

Поскольку конструкторы - это детализация реализации - они не являются чем-то, что пользователь интерфейса / суперкласса действительно может вызвать вообще. Когда они получат экземпляр, он уже построен; и наоборот, в то время, когда вы строите объект, по определению нет переменной, которой в настоящее время присвоено.

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

1
задан Yah 11 August 2010 в 05:44
поделиться

1 ответ

Ваши правила на самом деле очень близки к тому, чтобы делать то, что вы хотите. Единственная проблема, которую я вижу, заключается в тестовых шаблонах для двух утверждений RewriteRule. В настоящее время у вас есть

RewriteRule ^(.*)/?(.*)/?(.*)/?$ ...

... что эквивалентно следующему:

RewriteRule ^(.*)$

Это потому, что все, что проходит мимо первой группы захвата, может не совпадать ни с чем и все равно считаться совпадением, поэтому первая группа является жадной и соответствует всей входной строке без необходимости откладывать другие части шаблона.

Поскольку группы захвата в любом случае не должны захватывать прямые слэши, так как они используются в качестве разделителя переменных, простым решением будет изменить их на [^/]*, следующим образом:

Edit: Я также изменил RewriteCond во второй группе, чтобы игнорировать условие !-f в случае /index.php, что произойдет, если вы запросите поддомен без чего-либо после домена.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} ^(www\.)?domain.com$ [NC]
RewriteRule ^([^/]*)/?([^/]*)/?([^/]*)/?$ index.php?var1=$1&var2=$2&var3=$3 [NC,QSA,L]

RewriteCond %{REQUEST_FILENAME} !-f [OR]
RewriteCond %{REQUEST_URI} ^/index.php
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{HTTP_HOST} !^(www|mail).domain.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+).domain.com$ [NC] 
RewriteRule ^([^/]*)/?([^/]*)/?([^/]*)/?$ user.php?id=%2&var1=$1&var2=$2&var3=$3 [NC,QSA,L]
2
ответ дан 2 September 2019 в 22:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: