Как переписать правила URL в корневую папку, но не в ее подкаталоги? - PullRequest
2 голосов
/ 15 мая 2019

Я создаю тщательный URL / чистые URL для моих пользователей. Правила перезаписи .htaccess работают нормально, но у меня проблема с подкаталогами.

Особенно, когда кто-то печатает example.com/user, он отлично работает и получает данные со страницы example.com/profile.php?username=user. Но когда кто-то просматривает, example.com/subdirectory/user, это также показывает содержание example.com/profile.php?username=user.

Как я могу ограничить правила перезаписи только моим корневым каталогом, а не его подкаталогом, чтобы при просмотре example.com/subdirectory/user они были перенаправлены на 404 Not found как обычно, если в этом подкаталоге нет такого файла или папки.

.htaccess код выглядит следующим образом:

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)/?$ profile.php?username=$1 [L]

1 Ответ

1 голос
/ 15 мая 2019

[^\.]+ - плохой заполнитель, который соответствует почти чему-либо (включая сегменты пути).

Поскольку имена пользователей, скорее всего, буквенно-цифровые, \w+ лучше подходит:

RewriteRule ^(\w+)/?$ profile.php?username=$1 [L]

Кстати, как правило, вам нужно больше говорящих путей, таких как /user/name…, а не магический поиск в корне сайта.

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