Ваша проблема в том, что оба условия почти идентичны, т. Е. Все, что соответствует ^([_A-Z0-9a-z-+]+)$
, также будет соответствовать ^([^.]+)$
, поэтому кто-то, получающий доступ к mysite.com/user1
, будет перенаправлен на mysite.com/user1.php
, так как это первое правило, котороевстречается и имеет флаг L
, чтобы предотвратить обработку большего количества правил.Чтобы этого не происходило, вам нужно изменить правила, например, может потребоваться, чтобы пользовательские страницы были mysite.com/users/user1
?Тогда вы можете написать правила как
RewriteRule ^([^./]+)$ $1.php [NC,L]
RewriteRule ^users/([_A-Z0-9a-z-+]+)$ profile.php?user=$1 [S=1]
Обратите внимание, что вам нужно добавить /
к символам, которые не будут сопоставлены в первом правиле, в противном случае оно все равно будет соответствовать mysite.com/users/user1
.
Изменить
Несколько других альтернатив:
Если вы хотите, чтобы действия (например, объединение) использовали URL-адреса, такие как mysite.com/action/join
, тогда вы можете оставить пользователейна верхнем уровне, например
RewriteRule ^action/([^.]+)$ $1.php [NC,L]
RewriteRule ^([_A-Z0-9a-z-+]+)$ profile.php?user=$1 [S=1]
Или, если вы знаете имена всех ваших действий, вы можете поместить их в чередование (для этого может потребоваться, чтобы у вас не было пользователя с именем, например, join
):
RewriteRule ^(join|login|logout|delete)$ $1.php [NC,L]
RewriteRule ^([_A-Z0-9a-z-+]+)$ profile.php?user=$1 [S=1]