Совпадение "полной остановки" в моде переписать - PullRequest
0 голосов
/ 20 июля 2010

В данный момент я просто сопоставляю цифры, буквы, тире и подчеркивания в моем файле .htaccess:

RewriteRule ^([A-Za-z0-9-_]+)/?$ index.php?folder=$1

Я также хочу сопоставить полные остановки в строке.Я не хочу использовать:

(.*)

Я пробовал:

([.A-Za-z0-9-_]+)
([\.A-Za-z0-9-_]+)
([\\.A-Za-z0-9-_]+)
([A-Za-z0-9-_\.]+)

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

---------- Дополнительная информация ----------------

Например:

mydomain.com / groups / green / должен перейти на index.php? Folder = green

Кроме того, я переписываю субдомены поверх этого (я думаю, это вызывает осложнения)) ...

anotherdomain.com должен сопоставиться с index.php? Folder = anotherdomain.com

Я успешно переписал поддомен со следующим правилом:

# external group domain name
RewriteCond %{ENV:Rewrite-Done} !^Yes$
## exclude requests from myhost.com
RewriteCond %{HTTP_HOST} !^www\.myhost\.com
## allowed list of domain masking domains
RewriteCond %{HTTP_HOST} ^(anotherdomain.com|extra.domain.com|external.otherdomain.com)
RewriteRule (.*) /groups/%1/$1

Я думаю, что здесь кроется сложность.

---------------- Решение ----------------------

Несмотря на то, что я не нашел решения вышеупомянутой проблемы, я обошел ее, изменив первое перенаправление (которое сопоставляет внешние домены) с:

 RewriteRule (.*) /groups/%1/$1

to:

RewriteRule (.*) /groups/external/$1&external_domain=%1

Вторая перезапись (в папке) может затем интерпретироватьПеременная «внешний домен» вместо папки.

1 Ответ

1 голос
/ 20 июля 2010

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

На самом деле существует небольшая проблема со второй чертой в 0-9-_.Если вы хотите использовать тире внутри квадратных скобок, вы должны поместить ее в начало класса символов.В противном случае он будет иметь особое значение определения диапазона символов:

([-.A-Za-z0-9_]+)

Если это не сработает, то с вашим RewriteRule что-то не так.Например, если это глобальное правило, а не для каждого каталога (без RewriteBase), то URL-адреса будут начинаться с косой черты /.

...