Ваше регулярное выражение не соответствует точкам.
Последовательность символов в скобках означает «Совпадение только этих символов один раз», а +
из него означает «Совпадение более одного раза». Таким образом, в запрошенном 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», чтобы узнать о регулярных выражениях. Например, этот сайт является хорошей отправной точкой, а этот - хорошим онлайн-тестером.