условия
Но это не все! Хотя RewriteRule
Формат условий прост:
RewriteCond Something_to_test Condition
Любое условие RewriteCond
RewriteRule
RewriteCond
RewriteRule
Это работает так: mod_rewrite берет все RewriteRules
RewriteRule
Если существует шаблон RewriteRule
RewriteRule
Если это произойдет, произойдет правильная замена, но если нет, mod_rewrite ищет оставшиеся условия. Когда больше нет условий, проверяется последующий RewriteRule
Таким образом, вы можете настроить перезапись URL-адресов, используя условия, основанные практически на всем, что известно во время передачи HTTP в Apache — и многое другое! В основном вы можете использовать все эти переменные в строке Something_to_test
- Переменные заголовка HTTP:
HTTP_USER_AGENT, HTTP_REFERER,
HTTP_COOKIE, HTTP_FORWARDED, HTTP_HOST, HTTP_PROXY_CONNECTION,
HTTP_ACCEPT
- Переменные подключения и запроса:
REMOTE_ADDR, REMOTE_HOST, REMOTE_USER,
REMOTE_IDENT, REQUEST_METHOD, SCRIPT_FILENAME,
PATH_INFO, QUERY_STRING, AUTH_TYPE
- Внутренние переменные сервера:
DOCUMENT_ROOT, SERVER_ADMIN,
SERVER_NAME, SERVER_ADDR, SERVER_PORT, SERVER_PROTOCOL,
SERVER_SOFTWARE
- Системные переменные:
TIME_YEAR, TIME_MON, TIME_DAY,
TIME_HOUR, TIME_MIN, TIME_SEC, TIME_WDAY, TIME
- специальные значения mod_rewrite:
API_VERSION, THE_REQUEST, REQUEST_URI,
REQUEST_FILENAME, IS_SUBREQ
Условие может быть простой строкой или стандартным регулярным выражением с такими дополнениями, как:
-
<, >, =
-
-f
Something_to_test
-
-d
Something_to_test
Как вы можете видеть, этого более чем достаточно для указания условия, подобного этому (взято из руководства mod_rewrite):
RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*
RewriteRule ^/$ /homepage.max.html [L]
RewriteCond %{HTTP_USER_AGENT} ^Lynx.*
RewriteRule ^/$ /homepage.min.html [L]
RewriteRule ^/$ /homepage.std.html [L]
Когда браузер запрашивает страницу индекса, может произойти 3 вещи:
- браузер с движком Mozilla, браузер будет обслуживаться homepage.max.html
- с помощью Lynx (символьный браузер) откроется homepage.min.html
- если имя браузера не содержит ни «Mozilla», ни «Lynx», будет отправлен стандартный файл homepage.std.html
Вы даже можете запретить пользователям доступ к изображениям вне вашего сервера:
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://localhost/.*$ [OR,NC]
RewriteCond %{HTTP_REFERER} !^http://mysite.com/.*$ [OR,NC]
RewriteCond %{HTTP_REFERER} !^http://www.mysite.com/.*$ [OR,NC]
RewriteRule .*.(gif|GIF|jpg|JPG)$ http://mysite/images/bad.gif [L,R]
Но, конечно, существуют бесконечные возможности, включая условия, зависящие от IP или времени, и т. Д.