Как разрешить точку в URL htaccess? - PullRequest
0 голосов
/ 11 июля 2019

Я начинаю с php и хочу использовать точку (.) В URL. Например, кто-то с именем пользователя test.test1 должен указать мне на профиль пользователя с таким именем, но я получаю сообщение об ошибке, в котором говорится, что объект не найден. Однако я, если я использую буквы, цифры, тире или подчеркивание, он работает просто отлично.

Here it is working perfectly fine

Но вот что происходит, когда я использую точку в URL: enter image description here

RewriteEngine On

RewriteRule ^([a-zA-Z0-9_-]+)$ profile.php?profile_username=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ profile.php?profile_username=$1

Это весь код .htaccess, который у меня есть.

1 Ответ

5 голосов
/ 11 июля 2019

Ваше регулярное выражение не соответствует точкам.

Последовательность символов в скобках означает «Совпадение только этих символов один раз», а + из него означает «Совпадение более одного раза». Таким образом, в запрошенном URL-адресе сопоставляются только символы, определенные в скобках, которые не содержат точек. Вы должны добавить «символ точки» в вашей последовательности символов.

Таким образом, ваше регулярное выражение из ^([a-zA-Z0-9_-]+)$ должно стать ^([a-zA-Z0-9_-.]+)$

RewriteEngine On

RewriteRule ^([a-zA-Z0-9_-.]+)$ profile.php?profile_username=$1
RewriteRule ^([a-zA-Z0-9_-.]+)/$ profile.php?profile_username=$1

Также, чтобы не совпадать с путями, которые фактически существуют в виде файлов или каталогов, используйте эти условия перед правилами, которые почти соответствуют «всему», включая цель перезаписи (profile.php):

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

Финальный .htaccess будет выглядеть так:

RewriteEngine On

# this rule should not match existing files and directories
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-.]+)$ profile.php?profile_username=$1

# this rule should not match existing directories
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9_-.]+)/$ profile.php?profile_username=$1

P.S: Я рекомендую вам прочитать некоторые статьи о Регулярных выражениях и использовать «Тестер Regex», чтобы узнать о регулярных выражениях. Например, этот сайт является хорошей отправной точкой, а этот - хорошим онлайн-тестером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...