.htaccess переписывает, отменяя друг друга ... Есть идеи? - PullRequest
0 голосов
/ 26 августа 2018

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

Первое правило просто удалить. php из имен страниц,

пример: mysite.com/join вместо mysite.com/join.php

RewriteEngine On
Rewrite Condition : %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

Второе правило чтобы пользователям было проще делиться своими профилями на моем сайте,

пример: mysite.com/user1, а не фактический URL mysite.com/profile.php?user=user1

RewriteRule ^([_A-Z0-9a-z-+]+)$ profile.php?user=$1 [S=1]

Я играл в раундес ними, и они по существу взаимно уничтожают друг друга - есть идеи, как мне заставить их обоих работать?

Спасибо

1 Ответ

0 голосов
/ 27 августа 2018

Ваша проблема в том, что оба условия почти идентичны, т. Е. Все, что соответствует ^([_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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...