Как избежать проблем с совпадением URL и каталога при редактировании файла .htaccess? - PullRequest
0 голосов
/ 17 июня 2011

У меня есть следующие строки в файле .htaccess в каталоге сайта:

RewriteEngine On
RewriteRule ^([a-z]{1}[a-z0-9_-]{3,20})$ account.php?username=$1&%{QUERY_STRING}

Если он получает URL, например:

http://localhost/samplesite/johnsmith

перезапишет его на

http://localhost/samplesite/account.php?username=johnsmith

что хорошо.

Проблема возникает, когда в каталоге сайта есть каталог с именем johnsmith . затем URL перезаписывается и отображается как

http://localhost/samplesite/johnsmith/?username=johnsmith

и это проблема. Я пытаюсь реализовать функциональность страниц учетной записи для каждого пользователя, но если пользователь захочет зарегистрировать имя пользователя, например, какой-либо каталог в корне, функциональность будет нарушена? Я попытался добавить условия перезаписи, чтобы проверить, соответствует ли запрошенный URL существующему каталогу или файлу:

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

но я не знаю, как поступить.

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

Кто-нибудь может мне помочь раскрыть это дело? Спасибо!

1 Ответ

0 голосов
/ 17 июня 2011

Ваш RewriteCond будет работать, если он находится в правильном месте.Ваш полный .htaccess должен выглядеть следующим образом:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
# ---------------------------------------------------------------See info below--
RewriteRule ^([a-z]{1}[a-z0-9_-]{3,20})$ account.php?username=$1&%{QUERY_STRING}

Кроме того, вам не нужно %{QUERY_STRING}.Вместо этого вы должны использовать флаг QSA для добавления остальной части строки запроса ...

RewriteRule ^([a-z]{1}[a-z0-9_-]{3,20})$ account.php?username=$1 [L,QSA]
...