Архив метки: mod-rewrite

Как сделать редирект черз .htaccess если браузер IE6

Иногда приходится разрабатывать проекты, работающий с ограниченным количеством браузеров, либо же без потдержки старых версий (IE6 к примеру). В таких случаях логично организовать редирект на страницу с соответствующим текстом. Сделать это можно как при помощи Javasript-а, так и на стороне PHP. Но как по мне, более элегантным решением будет редирект на стороне веб-сервера Apache, а точнее при помощи фала .htaccess. Создаем файл .htaccess в корне сайта либо же открываем существующий, и добписываем следующие директивы:


RewriteCond %{REQUEST_FILENAME} !^.png [nc]
RewriteCond %{REQUEST_FILENAME} !^.css [nc]
RewriteCond %{REQUEST_FILENAME} !^.jpg [nc]
RewriteCond %{REQUEST_FILENAME} !^.js [nc]
RewriteCond %{REQUEST_FILENAME} !^.gif [nc]
RewriteCond %{HTTP_USER_AGENT} "Firefox/2" [or]
RewriteCond %{HTTP_USER_AGENT} "Firefox/1" [or]
RewriteCond %{HTTP_USER_AGENT} "Flock/1" [or]
RewriteCond %{HTTP_USER_AGENT} "Camino/1" [or]
RewriteCond %{HTTP_USER_AGENT} "Opera/9" [or]
RewriteCond %{HTTP_USER_AGENT} "Opera/8" [or]
RewriteCond %{HTTP_USER_AGENT} "Opera/7" [or]
RewriteCond %{HTTP_USER_AGENT} "Opera/6" [or]
RewriteCond %{HTTP_USER_AGENT} "Opera/5" [or]
RewriteCond %{HTTP_USER_AGENT} "Opera/4" [or]
RewriteCond %{HTTP_USER_AGENT} "Opera/3" [or]
RewriteCond %{HTTP_USER_AGENT} "Opera/2" [or]
RewriteCond %{HTTP_USER_AGENT} "Opera/1" [or]
RewriteCond %{HTTP_USER_AGENT} "Safari/4" [or]
RewriteCond %{HTTP_USER_AGENT} "Safari/3" [or]
RewriteCond %{HTTP_USER_AGENT} "Safari/2" [or]
RewriteCond %{HTTP_USER_AGENT} "Safari/1" [or]
RewriteCond %{HTTP_USER_AGENT} "Navigator/" [or]
RewriteCond %{HTTP_USER_AGENT} "MSIE 6" [or]
RewriteCond %{HTTP_USER_AGENT} "MSIE 5" [or]
RewriteCond %{HTTP_USER_AGENT} "MSIE 4" [or]
RewriteCond %{HTTP_USER_AGENT} "MSIE 3" [or]
RewriteCond %{HTTP_USER_AGENT} "MSIE 2" [or]
RewriteCond %{HTTP_USER_AGENT} "MSIE 1"
RewriteRule . upgrade.html [L]

Конечно же работать все это будет только при условии подключеного модуля mod_rewrite.

Автор: Sergiy Kamolov
Дата публикации: 2012-10-05T14:38:00.002+03:00

Elgg: mod-rewrite для NGINX

Сегодня развернул Elgg на веб-сервере NGINX, и первая проблема с которой столкнулся — это небходимость замены mod-rewrite директив, которые содержатся в файле .htaccess, на соответсвующие правила для NGINX (rewrite-rules).

И первый вопрос, который у меня возник: куда нужно писать эти правила?
Rewrite-rules для Nginx указываются внутри секции server в файле настройки виртуального хоста, например /etc/nginx/sites-available/default.

Следующий вопрос был: что же туда писать?
Если подумать логически, то задача не совсем сложная, необходимо всего лишь конвертировать директивы из htaccess в соответвующие правила для nginx. Спасибо Томасу Делингу, который уже провел иследования в этом вопросе и успешно конвертировал директивы файла htaccess для Elgg 1.8.2. Все что мне осталось, это скопировать набор правил и обновить файл настройки виртуального хостинга, в результате он выглядел приблизительно так:

server {
listen 80;
server_name elgg.domain.com;
root /var/www-nginx/elgg/htdocs/;

error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;

index index.php index.html;
fastcgi_index index.php;

client_max_body_size 8M;
client_body_buffer_size 256K;

rewrite ^/pg/([A-Za-z0-9_-]+)$ /engine/handlers/page_handler.php?handler=$1&$args;
rewrite ^/pg/([A-Za-z0-9_-]+)/(.*)$ /engine/handlers/page_handler.php?handler=$1&page=$2&$args;
rewrite ^/tag/(.+)/?$ /engine/handlers/page_handler.php?handler=search&page=$1;
rewrite ^/action/([A-Za-z0-9_-/]+)$ /engine/handlers/action_handler.php?action=$1&$args;
rewrite ^/cache/(.*)$ /engine/handlers/cache_handler.php?request=$1&$args;
rewrite ^/services/api/([A-Za-z0-9_-]+)/(.*)$ /engine/handlers/service_handler.php?handler=$1&request=$2&$args;
rewrite ^/export/([A-Za-z]+)/([0-9]+)/?$ /engine/handlers/export_handler.php?view=$1&guid=$2;
rewrite ^/export/([A-Za-z]+)/([0-9]+)/([A-Za-z]+)/([A-Za-z0-9_]+)/$ /engine/handlers/export_handler.php?view=$1&guid=$2&type=$3&idname=$4;
rewrite /xml-rpc.php /engine/handlers/xml-rpc_handler.php;
rewrite /mt/mt-xmlrpc.cgi /engine/handlers/xml-rpc_handler.php;
rewrite ^/rewrite.php$ /install.php;
if (!-d $request_filename){
set $rule_11 1$rule_11;
}
if (!-f $request_filename){
set $rule_11 2$rule_11;
}
if ($rule_11 = "21"){
rewrite ^/([A-Za-z0-9_-]+)$ /engine/handlers/page_handler.php?handler=$1;
}
if (!-d $request_filename){
set $rule_12 1$rule_12;
}
if (!-f $request_filename){
set $rule_12 2$rule_12;
}
if ($rule_12 = "21"){
rewrite ^/([A-Za-z0-9_-]+)/(.*)$ /engine/handlers/page_handler.php?handler=$1&page=$2;
}

location ~ .php$ {
include fastcgi_params;

# Assuming php-fastcgi running on localhost port 9000
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
}

# Do not put CSS there or it will break simplecache
location ~* .(bmp|js|gif|ico|jpg|jpeg|png)$ {
expires max;
# log_not_found off;
}
}

Автор: Sergiy Kamolov
Дата публикации: 2012-08-06T13:42:00.001+03:00