LINUX.ORG.RU

0
Всего сообщений: 63

nginx rewrite

всем привет.

подскажите плиз
нужно удалять на конце слеши, но только если это не директории или файлы
как можно реализовать через rewrite if

 , ,

carter ()

NGINX убрать index.php\html

Добрый день! Что то запарился, нужно убрать и адресов index.php\html для SEO, но что то не выходит убрать index.php

Пытаюсь таким правилом

if ($request_uri ~ ^/index.(html|php)) {
    rewrite ^.*$ / permanent;
}

Весь location выглядит так

location / {
rewrite ^/favicon.ico$ /./files/page/d1favicon.ico last;
if ($request_uri ~ ^/index.(html|php)) {
    rewrite ^.*$ / permanent;
}
rewrite ^/pay/([^/]+)/(.+)$ /pay.php?paymentId=$1&orderId=$2 last;
rewrite ^/tarif/(.+)$ /./index.php?path=tarif&dyn_url=$1 last;
rewrite ^/post/(.+)$ /./index.php?path=post&dyn_url=$1 last;
rewrite ^/road/(.+)$ /./index.php?path=road&dyn_url=$1 last;
rewrite ^/city/(.+)$ /./index.php?path=city&dyn_url=$1 last;
rewrite ^/faq/(.+)$ /./index.php?path=faq&dyn_url=$1 last;
if (!-f $request_filename){
	set $rule_2 1$rule_2;
}
if (!-d $request_filename){
	set $rule_2 2$rule_2;
}
if (!-e $request_filename){
	set $rule_2 3$rule_2;
}
if ($request_filename !~ "-l"){
	set $rule_2 4$rule_2;
}
if ($rule_2 = "4321"){
rewrite /(.+) /./index.php?path=$1 last;
}
if ($request_uri ~* "\/\/") {
                rewrite ^/(.*)      $scheme://$host/$1    permanent;
            }

 ,

skynetyar ()

WEBP Первое знакомство

Задача оптимизировать сайт по Google PSI (PageSpeed Insights).

Т.к. Гугель при помощи вышеупомянутых сервисов усиленно продвигает сабжевый формат, нужно сделать конвертацию и/или реврайт filename.jpg|filename.png —> filename.webp.

Кроме кучи всего под задачу есть плагин. Тем не менее, что-то мне подсказывает, что правило вида

if ($http_accept ~* "webp"){
    rewrite ^/(.*).(jpe?g|png)$ /wp-content/plugins/webp-express/wod/webp-on-demand.php?wp-content=wp-content break;
    }

кривое в части регулярки как это обычно и бывает. Короче говоря, у меня два вопроса: подскажите рабочий реврайт и используете ли вы webp на практике для мобильной версии сайта для экономии трафика и оптимизации скорости загрузки страниц?

Еще немного толковой информации по теме можно найти на ruhighload

 , , ,

Twissel ()

переход с апача на nginx+php-fpm

не получается перенести все правила с htaccess в nginx

RewriteRule ^adv/?$ /adv/index.php [L]
RewriteRule ^contacts/?$ /contacts/index.php [L]
RewriteRule ^about/?$ /about/index.php [L]

RewriteRule ^politics/?$ /archive.php?cat=politics [L]
RewriteRule ^economy/?$ /archive.php?cat=economy [L]
RewriteRule ^society/?$ /archive.php?cat=society [L]
RewriteRule ^world/?$ /archive.php?cat=world [L]
RewriteRule ^culture/?$ /archive.php?cat=culture [L]
RewriteRule ^incident/?$ /archive.php?cat=incident [L]
RewriteRule ^sport/?$ /archive.php?cat=sport [L]
RewriteRule ^technology/?$ /archive.php?cat=technology [L]
RewriteRule ^interesting/?$ /archive.php?cat=interesting [L]

пробую такой вариант

rewrite ^/world/?$ /archive.php?cat=world break;                                                                 

ссылка example.com/world/ начинает открываться, но ссылки на странице world отдаются 404 подскажите как сделать правильно?

 , , ,

Garcia ()

.htaccess перенаправление с :80

Всем привет.

Подскажите пжл, как через .htaccess сделать редирект с: `http://site.ru:80/catalog/` `http://site.ru:80/about/` и т.д. на: `http://site.ru/catalog/` `http://site.ru/about/` и т.д.

 , ,

stranger-ru ()

Неправильно работает Rewrite не видит тип файлов html

Помогите разобраться: В .htaccess не работает Redirect для файлов c расширением .html

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

в элементарной конструкции РАБОТАЕТ

Redirect 302 /page5 /page8

но если расширение файла .html не срабатывает Перенаправление

в конструкции с расширением .html не работает

Redirect 302 /page1.html /page2.html

за ранее всем спасибо.

АКТУАЛЬНО!!!

 , ,

shrmvl ()

Подскажите решение для nginx

Подключил перевод урла в нижний регистр через Перл модуль по рецепту отсюда

Но дело в том, что урлы в админке и параметры запросов не должны обрабатываться, чтобы работали плагины. Думаю, что нужно добавить, что-то в духе

if ($request_uri ~* ^/wp-admin/.+){
return $scheme://$host$old_uri?$args;
}

Но вот только как сохранить эти самые оригинальные параметры в рамках задачи у меня уже ума не хватает,чтоб додуматься.

Я и так сегодня целый день подарил Wordpress'у :-D

Можно, конечно, поставить плагин, но, в конце концов, админ я локал_и_не_очень_хоста или нет?! ))

beastie

 , , ,

Twissel ()

Перемонтируем ro в rw

Добрый день. Есть ТВ приставка, хочу редактировать содержимое файловой системы. Сейчас на ней залита прошивка провайдера, файловая система ubifs, ro. Модель приставки - imaqliq g-box.

mount
rootfs on / type rootfs (rw)
ubi0:rootfs on / type ubifs (ro,relatime)
devtmpfs on /dev type devtmpfs (rw,size=177556k,nr_inodes=44389,mode=755)
proc on /proc type proc (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
devpts on /dev/pts type devpts (rw,relatime,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,relatime,mode=777)
tmpfs on /tmp type tmpfs (rw,relatime,size=98304k,mode=777)
tmpfs on /media type tmpfs (rw,relatime)
ubi1:config on /etc/config type ubifs (rw,relatime)
cat proc/cpuinfo
machine         : stb9
processor       : 0
cpu family      : sh4
cpu variant     : st40-300
cpu type        : STxH205
cut             : 2.x
cpu flags       : fpu icbi synco fpchg
cache type      : split (harvard)
icache size     : 32KiB (2-way)
dcache size     : 32KiB (2-way)
address sizes   : 32 bits physical
bogomips        : 544.76
df -h
Filesystem                Size      Used Available Use% Mounted on
ubi0:rootfs              55.3M     55.3M         0 100% /
devtmpfs                173.4M         0    173.4M   0% /dev
tmpfs                   173.5M      4.0K    173.4M   0% /dev/shm
tmpfs                    96.0M    120.0K     95.9M   0% /tmp
tmpfs                   173.5M         0    173.5M   0% /media
ubi1:config               3.0M    120.0K      2.7M   4% /etc/config
uname -a
Linux 2.6.32.59-b2067 #1 Fri May 22 02:51:55 MSK 2015 sh4 GNU/Linux
Что пробовал -
mount -o rw,remount / 
mount -t ubifs -o remount,rw ubi0:rootfs /
В dmesg в обоих случаях вываливается это
 UBIFS: cannot re-mount due to prior errors
Помогите, куда дальше копать?)

 ,

tkipaes ()

Миграция Git → SVN и разделение репозитория

Есть старый проект в SVN, который хочу перевести на Git с сохранением истории, веток и меток. Миграцию на Git провел при помощи svn2git, тут проблем не возникло. Но беда в том, что по факту в одном репозитории лежит несколько смежных проектов, т.е. структура примерно такая

repository root
 + project1
 | + dir1
 |  |- file1
 |  |- file2
 | + dir2
 |  |- fileN
 | + dirN
 + project2
 | + dir2_1
 |  |- file2_1
 |  |- file2_2
 | + dir2_2
 |  |- file2_N
 | + dir2_N
 + projectN

Хотелось бы разнести проекты по отдельным репозиториям, и не просто разнести, но и сохранить соответствующие проекту метки и ветки и удалить лишние.

Пытаюсь сделать это через filter-branch вот так

git filter-branch --prune-empty --tag-name-filter cat --subdirectory-filter project1 -- --all
git push --all new_repo
Но в результате получается что-то не то. Сам код на месте, а вот с ветками и метками не складывается.

Подскажите, как сохранить ветки и метки при разделении?

 , , ,

sergs ()

mod_rewrite. .htaccess: что я еще забыл настроить?

Есть Apache 2.4.2 на Debian Linux 9.Апач ставил из стандартного репозитария, mod_rewrite тоже.

Корень сайта находится по пути /var/www/mysite.
На этот каталог настроен виртуальный хост local-mysite.ru.

Для начала положил в корень index.php с вызовом phpinfo(). Проверил вывод: в разделе Loaded Modules вижу mod_rewrite. Это хорошо.

Далее развернул тестовый сайт, его стартовый скрипт открывается по такому URL:
http://local-mysite.ru/appadv/frontend/web
и по такому тоже, само собой, открывается:
http://local-mysite.ru/appadv/frontend/web/index.php

Теперь мне нужно, чтобы когда в браузере открывается http://local-mysite.ru, следовал переход на вышеуказанный URL.
Для этого я написал .htaccess с таким содержимым:

Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on

# Если запрос не начинается с web, добавляем его
RewriteCond %{REQUEST_URI} !^/(appadv/frontend/web)
RewriteRule (.*) /appadv/frontend/web/$1

# Если файл или каталог не существует, идём к /web/index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /appadv/frontend/web/index.php

Поверил его в онлайн-тестировщике http://htaccess.madewithlove.be. Там преобразование идет правильное.

Но на моем хосте преобразования URI не происходит!

Для отладки отредактировал опцию в файле /etc/apache2/apache2.conf, чтобы видеть сообщения о редиректах:

LogLevel warn rewrite:trace4
Перезагрузил Apache. Обновил страницу с URL http://local-mysite.ru. Насколько я понимаю, в файле /var/log/apache2/error.log должны появиться строки, помеченные [rewrite...] или как-то так. Но ничего такого нет.

Я уже не знаю куда копать.

UPD1: Если это важно: по URL http://local-mysite.ru сейчас Апач отдает список файлов. А должен быть редирект.

UPD2: Модуль существует, и загружен:

# apachectl -M | grep rew
 rewrite_module (shared)
Боженьки, что ему еще надо?

 , ,

Xintrea ()

nginx и мобильный редирект

Есть сайт на битриксе, попросили сделать редирект c /catalog/ на /catalog_mobile/, но только с мобильных

        set $mobile_rewrite do_not_perform;

        ## chi http_user_agent for mobile / smart phones ##
        if ($http_user_agent ~* "(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino") {
                set $mobile_rewrite perform;
        }

        if ($http_user_agent ~* "^(1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-)") {
                set $mobile_rewrite perform;
        }
        ## redirect to m.example.com ##
        if ($mobile_rewrite = perform) {
                rewrite ^/catalog/ /catalog_mobile/? redirect;
                break;
        }

редирект работает, но после редиректа не заходит в любую позицию и перекидывает опять на /catalog_mobile/

в логах при переходе в позицию

"GET /catalog/plate-vechernee-galina-plokhaya/ HTTP/1.1" 302 154 "https://site.com/catalog_mobile/" "Mozilla/5.0 (Linux; Android 6.0.1; Redmi 4 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36" "-"

"GET /catalog_mobile/ HTTP/1.1" 200 19121 "https://site.com/catalog_mobile/" "Mozilla/5.0 (Linux; Android 6.0.1; Redmi 4 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36" "-"

как это можно исправить?

 , , , ,

Garcia ()

Простой вопрос по nginx: исключить uri из редиректа

Есть правило, которое перенаправляет с index.php на /

 if ($request_uri ~* "^(.*\/)index\.php$") {
        return 301 $1;
    }

Как мне добавить исключение, чтобы веб-сервер не перенаправлял $host/phpmyadmin/index.php ?

Возможно, что-нибудь можно добавить в это же условие?

Не соображу.

 , ,

Twissel ()

Apache + RewriteMap

Задача: Пропускать на сайт пользователей, если они пришли с определенных сайтов!

Затестил вариант:

RewriteCond %{HTTP_REFERER} "!google" [NC]
Если пришли не с гугла - выдаем 403. Все работает! Решил воспользоваться заманчивой директивой RewriteMap

Создал файл, указал там список сайтов в виде:

google.com -
example.com - 

Прописал в конфиге:

<IfModule mod_rewrite.c>
	RewriteEngine On
        RewriteMap allowreferer "txt:/home/allow_referer.txt"
	RewriteCond "%{HTTP_REFERER}" !=""
        RewriteCond "${allowreferer:%{HTTP_REFERER}|NOT-FOUND}" "=NOT-FOUND"
        RewriteRule ^ - [F,L]
    </IfModule>

И вижу, что нифига не работает! Если прописать в файл allow_referer.txt точные совпадения - то все работает как и ожидалось. А если просто домен - выдает 403! Как быть? Неужели про регулярки забыли в параметре MapName ?

Сча сделал так:

RewriteCond %{HTTP_REFERER} "(http|https):\/\/([a-z0-9\-\.]+)\.([a-z]{2,4}+)(|\/)(.*)"
RewriteCond "${allowreferer:%2.%3|NOT-FOUND}" "=NOT-FOUND"

Вроде работает, но не очень нравится такой вариант! Вернее сказать совсем не нравится!

На борту:

Server version: Apache/2.4.27 (Unix)
Server built:   Jul 25 2017 12:29:36

Прошу помощи!

P.S. Про nginx знаю. Пожалуйста, не ссылайтесь с репликой перехода туда!

 ,

xisip ()

Nginx. Rewrite аргумента в запросе.

Всем привет.

Вопрос следующий, есть nginx в режиме прокси. Через него надо отправить такой вот get запрос:

http://185.xxx.x.xx/auth/realms/master-realm/protocol/openid-connect/auth?response_type=code&client_id=regportal&redirect_uri=http%3A%2F%2Fsome.domain.com%2Fregportal%2Fsso%2Flogin&state=a49a02d5-f873-453f-9148-61793f11ecf3&login=true&scope=openid

В нем нужно подменить значение redirect_uri c some.domain.com на other.domain.com. Пытался сделать это регулярками и через $arg_redirect_uri, но судя по логам ничего не матчится.

Как сделать чтобы это работало?

 ,

phoen ()

Nginx конфиг. Смена root при определенном аргументе в запросе

Здравствуйте. Подскажите как правильно прописать конфиг nginx для такой ситуации: сайт находится в www/html/site.com/ второй в www/html/test.com/

Как я могу при условии определенного аргумента в запросе открывая сайт test.com делать rewrite на файл из папки site.com? Например что бы test.com/index.php?key=123 вместо index.php открывал файл second.php, который находится в папке site.com? Но при этом нужно что бы без аргумента, то есть test.com/index.php открывался сайт test.com. Переместить файл в папку test.com не могу, он должен быть в site.com То есть нужно поменять root только для этого запроса, а что бы при запросе без такого аргумента root снова был root /www/html/test.com

 ,

growield ()

nginx редирект на https и слеш

Добрый день!

Хочу сделать редирект на Https и добавлять слеш в конец если его нет.

Пытался как-то так:

server {
    listen 80;
    server_name mydomain.ru;
    rewrite   [^/]$ https:///$uri/  permanent;
}
не работает.

Просто редирект на https сделал так:

rewrite ^(.*)$ https:///$host$1 permanent;
Но нужно бы ещё придумать как добавлять слеш.

 , ,

el_paso ()

Обработка nginx URL с пробелами

Сайт на VDS: CentOS, nginx, PHP.

На сайте есть такая ссылка:

http://www.site.ru/%D0%91%D1%80%D1%8...20%D0%9B%D0%B8

Мне на сервере нужно преобразовать этот адрес в следующий вид:

http://www.site.ru/index.php?title=%...20%D0%9B%D0%B8 или http://www.site.ru/index.php?title=Брюс Ли

Для этого я прописал в nginx.conf следующее правило: rewrite ^/([а-пр-яa-zA-Z0-9_- ]+)/$ /index.php?title=$1;

Но это правило не работает. Возможно из за того, что на сервере адрес автоматически декодируется и не может обработать пробел.

Я пробовал прописать правило по разному: экранировал пробел, записывал его как \%20 или как «плюс», или \s - ничего не выходит.

Подскажите, как научить nginx обрабатывать пробел? Или как отключить в nginx автоматическое декодирование (я могу декодировать строку средствами PHP). Или может быть можно как то на стороне nginx перед реврайтом заменить все пробелы на, допустим, «плюс», а потом я в PHP его обратно преобразую.

Спасибо!

 ,

SeoNk ()

nginx редирект группы линков

Переходим с одного движка на другой, для СЕО надо сделать редирект группы урлов (1500 штук). Используем Nginx. Как можно реализовать такую штуку? Вот пример:

/1119608/c1119608/ /1088315/c1088315/; /1119876/c1119876/ /1229134/c1229134/; /1078947/c1078947/ /1208201/c1208201/; /1119850/c1119850/ /1223942/c1223942/; /1119658/c1119658/ /1175822/c1175822/; /1119708/c1119708/ /1205329/c1205329/; /1119691/c1119691/ /1196668/c1196668/; /1119782/c1119782/ /1213320/c1213320/; /1119701/c1119701/ /1199023/c1199023/; /1119706/c1119706/ /1204426/c1204426/; /1119694/c1119694/ /1197093/c1197093/; /1038976/c1038976/ /1083543/c1083543/; /1119825/c1119825/ /1217899/c1217899/; /1119650/c1119650/ /1160958/c1160958/; /1119751/c1119751/ /1211222/c1211222/; /1119753/c1119753/ /1211223/c1211223/; /1119756/c1119756/ /1211224/c1211224/; /1119826/c1119826/ /1218203/c1218203/;

 ,

demjanok ()

Apache mod_rewrite P

Apache2 не проксирует URI часть адреса «asterisk» на "http://127.0.0.1:8088/asterisk/"

/var/www/html/pbx# cat .htaccess
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^/asterisk/(.*)$ http://127.0.0.1:8088/asterisk/$1 [P]
</IfModule>
<Directory /var/www/html/pbx>
  Options Indexes FollowSymLinks MultiViews
  AllowOverride All
  Order allow,deny
  allow from all
</Directory>

 , , ,

petav ()

Apache, редирект GET-запроса по GET-параметру на другой домен с сохранением GET-параметров.

Доброго времени суток, прошу помощи c созданием правила редиректа на базе web-сервера Apache. Необходимо настроить редирект GET-запроса по GET-параметру на другой домен с сохранением GET-параметров. Пример:
http://192.168.1.10/script?test=da&get1=11&get2=22&get3=33
после отработки правила:
http://192.168.1.20/script?test=da&get1=11&get2=22&get3=33

Погуглив и немного поразбиравшись, знаний явно не хватает, остановился на варианте:

RewriteCond %{QUERY_STRING} =test=da
RewriteRule (.*) http://192.168.1.20/$1 [R=301,L,QSA]

К сожалению, в данный момент протестировать возможности нету, поэтому прошу подсказать, как должно работать в теории, т.е. предположения. Спасибо.

 , ,

feeee2008 ()