Возникли проблемы с поиском "." используя htaccess - PullRequest
0 голосов
/ 19 декабря 2009

Я настраиваю веб-сайт, который (в идеале) позволил бы пользователям получать доступ к домашним страницам других пользователей с помощью URL в формате «www.mysite.com/Page/ThisLanham», где «ThisLanham» - это имя пользователя. Имя пользователя начинается с буквы и может состоять из любого буквенно-цифрового символа, а также подчеркивания, дефиса или точки.

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

RewriteRule ^page/([a-zA-Z][0-9a-zA-Z-_]*)/?$ Page/?un=$1 [NC,L]

Тем не менее, я попробовал несколько способов проверки за период, но все они привели к 500 Внутренняя ошибка сервера. Вот некоторые мои попытки:

RewriteRule ^page/([a-zA-Z][0-9a-zA-Z-\_\\.]\*)/?$ Page/?un=$1 [NC,L]
RewriteRule ^page/([0-9a-zA-Z-\_\\.]\*)/?$ Page/?un=$1 [NC,L]
RewriteRule ^page/([a-zA-Z].\*)/?$ Page/?un=$1 [NC,L]
RewriteRule ^page/(.\*)/?$ Page/?un=$1 [NC,L]

Мой план резервного копирования больше не разрешает пользователям включать точки в свои имена пользователей, но я бы предпочел найти решение. Есть идеи ???

Ответы [ 2 ]

0 голосов
/ 23 декабря 2009

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

Попробуйте это правило, исключающее пункт назначения (в данном случае index.php ):

RewriteCond $1 !=index.php
RewriteRule ^page/([a-zA-Z][0-9a-zA-Z-_.]*)/?$ Page/?un=$1 [NC,L]
0 голосов
/ 19 декабря 2009

Точка не является метасимволом внутри (в скобках) класса символов. Дефис, однако, есть. [Z-_] это диапазон символов от Z до _. В ASCII это эквивалентно [Z\[\\\]^_]. Попробуйте:

RewriteRule ^/?page/([a-z][-_.0-9a-z]*)/?$ Page/?un=$1 [NC,L]

Примечание: поскольку сравнение выполняется без учета регистра, я не беспокоился о диапазонах символов A-Z.

Что касается переписывания, вы можете перенаправить все URL-адреса, начинающиеся с "страницы", и обрабатывать недопустимые имена пользователей в других местах, например на странице "Неизвестный пользователь" или с вашим сценарием (а не сервер) генерировать 404.

RewriteRule ^/?page/([^/]+)/?$ Page/?un=$1 [NC,L]

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

...