Я хочу сделать mod_rewrite
так, чтобы:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Любые запросы к users/
отправляются index.php?login=(whatever)
.
RewriteRule ^users/(.+) ?login=$1 [NE,L]
Любые другие запросы, кроме users/
, отправляются в то же место.
RewriteRule ^(.+) users/?login=$1 [NE,L]
Но вторая часть производит 500 Internal Server Error
Меня попросили объяснить это, поэтому вот несколько примеров:
- если существует "domain.com/aaa/", он переходит в "domain.com/aaa/"
- если "domain.com/bbb/" не существует, он переходит к "domain.com/users/?login=bbb"
- если существует "domain.com/ccc.html, он переходит к" domain.com/ccc.html "
- если "domain.com/ddd.html не существует, он переходит к" domain.com/users/?login=ddd.html "
- между тем, «domain.com/users/eee» переходит к «domain.com/users/?login=eee», поскольку это основное условие, а второе условие - резервное или более общее.
1 ответ
Это должно сработать. Вы должны повторить условия, они не переносятся на следующее правило.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^users/(.+)$ /users/?login=$1 [NE,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ /users/?login=$1 [NE,L]
Предполагая, что каталог /users/
действительно существует.
Или это более эффективно, если вы не будете запускать какие-либо правила позже. Это предотвращает любую обработку существующих элементов и позволяет избежать дублирования проверок файловой системы.
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^users/(.+)$ /users/?login=$1 [NE,L]
RewriteRule ^(.+)$ /users/?login=$1 [NE,L]
Новые вопросы
apache
Используйте этот тег (вместе с соответствующим тегом языка программирования) для вопросов программирования, касающихся HTTP-сервера Apache. Не используйте этот тег для вопросов о других продуктах Apache Foundation. Обратите внимание, что вопросы конфигурации сервера обычно лучше подходят на https://serverfault.com
/index.php
, а этот идет в/users/
?