Comrada Posted November 27, 2011 Share Posted November 27, 2011 Знаю тема уже избитая и тут даже один раз поднималась, но предложенный там конфиг не решает проблемы. Итак, есть пресловутый конфиг: rewrite ^/([a-z0-9]+)-([a-z0-9]+)(-[_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*).jpg$ /img/p/$1-$2$3.jpg last; rewrite ^/([0-9]+)-([0-9]+)/([_a-zA-Z0-9-]*).jpg$ /img/p/$1-$2.jpg last; rewrite ^/([0-9]+)(-[_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*).jpg$ /img/c/$1$2.jpg last; rewrite "^/lang-([a-z]{2})/([a-zA-Z0-9-]*)/([0-9]+)-([a-zA-Z0-9-]*).html(.*)$ /product.php?id_product=$3&isolang;=$1$5" last; rewrite "^/lang-([a-z]{2})/([0-9]+)-([a-zA-Z0-9-]*).html(.*)$ /product.php?id_product=$2&isolang;=$1$4" last; rewrite "^/lang-([a-z]{2})/([0-9]+)-([a-zA-Z0-9-]*)(.*)$ /category.php?id_category=$2&isolang;=$1" last; rewrite ^/([a-zA-Z0-9-]*)/([0-9]+)-([a-zA-Z0-9-]*).html(.*)$ /product.php?id_product=$2$4 last; rewrite ^/([0-9]+)-([a-zA-Z0-9-]*).html(.*)$ /product.php?id_product=$1$3 last; rewrite ^/([0-9]+)-([a-zA-Z0-9-]*)(.*)$ /category.php?id_category=$1 last; rewrite ^/content/([0-9]+)-([a-zA-Z0-9-]*)(.*)$ /cms.php?id_cms=$1 last; rewrite ^/([0-9]+)__([a-zA-Z0-9-]*)(.*)$ /supplier.php?id_supplier=$1$3 last; rewrite ^/([0-9]+)_([a-zA-Z0-9-]*)(.*)$ /manufacturer.php?id_manufacturer=$1$3 last; rewrite "^/lang-([a-z]{2})/(.*)$ /$2?isolang=$1" last взятый с сысоевского сайта, но там не указаны параметры локейшена, соотвественно, начинаю с простого, вставляю правила в конструкцию location ~ \.php$ { } ну и естественно они не срабатывают, потому что сей локейшн работает только для php файлов. Дальше, вставляю часть правил в конструкцию location ~*\.(jpg|html)$ { rewrite ^/([a-z0-9]+)\-([a-z0-9]+)(\-[_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*)\.jpg$ /img/p/$1-$2$3.jpg last; rewrite ^/([0-9]+)\-([0-9]+)/([_a-zA-Z0-9-]*)\.jpg$ /img/p/$1-$2.jpg last; rewrite ^/([0-9]+)(\-[_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*)\.jpg$ /img/c/$1$2.jpg last; rewrite ^/([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$2$4 last; rewrite ^/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$1$3 last; } ОК, показ товаров работает, картинки оторбаражаются, идем дальше, надо как-то отображать статические страницы location /content/ { rewrite ^/content/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$ /cms.php?id_cms=$1 last; } Работает, добавляем показ производителей и поставщиков location ~/([0-9]+)__([a-zA-Z0-9-]*)(.*) { rewrite ^/([0-9]+)__([a-zA-Z0-9-]*)(.*)$ /supplier.php?id_supplier=$1$3 last; } location ~/([0-9]+)_([a-zA-Z0-9-]*)(.*) { rewrite ^/([0-9]+)_([a-zA-Z0-9-]*)(.*)$ /manufacturer.php?id_manufacturer=$1$3 last; } Добавляем показ категорий location ~/([0-9]+)\-([a-zA-Z0-9-]*)(.*) { rewrite ^/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$ /category.php?id_category=$1 last; } И тут появляется первый подвох, если этот локейшн поместить перед ~*\.(jpg|html)$ то перестанут показываться картинки товаров, когда просматриваешь в режими категорий, потому что эта конструкция совпадает с форматом картинок domain.ru/7-60-home/prod-1.jpg так что сначала даем отработать ~*\.(jpg|html)$ а потом уже категориям. В принципе теперь все работает(lang я не использую, язык у меня один), кроме страниц, перечисленных в админке в разделе Настройки/Мета-теги и ЧПУ такие, как best-sales.php, sitemap.php, authentication.php ну и так далее, они в ЧПУ выглядят, соответственно, как domain.ru/best-sales, domain.ru/sitemap, domain.ru/authentication и т.д. как их обрабатывать? тупо прописывать к каждому из этих файлов свой локейшн?! огород. Начал придумывать всякие конструкции типа location ~/([a-zA-Z-]*)(.*) { rewrite ^/([a-zA-Z-]*)(.*)$ /$1.php last; } работает, но только когда открываешь эти пути domain.ru/best-sales, если пытаешься открыть корень domain.ru/ выдает 404. Может, конечно, я тут слишком много конструкций нагородил, прошу сильно не ругать, с регулярными выражениями не дружу, экстраполирую на основе имеющихся примеров. Прошу откликнуться настроивших это дело, на сайте у тов. Kerm, я точно знаю, работает))) Просто не хочу в личку писать, пусть решение будет озвучено открыто, может ещё кому понадобится. Link to comment Share on other sites More sharing options...
Ronaldo Perez Posted November 29, 2011 Share Posted November 29, 2011 параметры локейшена зависят от того что именно отдается нжинксом, если отдается только статика - оставляете правила под нее, остальное на апач. Общий "пресловутый конфиг взятый с сысоевского сайта" я привел чтобы народу легче искать было. чтобы не городить огород со статическими страницами, можно заглянуть в генерируемый движком хтассес (ведь нам фактически надо переписать правила под другой сервер) и видим RewriteRule ^content/([0-9]+)\-([a-zA-Z0-9-]*) /cms.php?id_cms=$1 [QSA,L] - для созданых нами страниц, и типа так RewriteRule ^best-sales$ /best-sales.php [QSA,L] стандартные все прописаны Link to comment Share on other sites More sharing options...
Comrada Posted November 29, 2011 Author Share Posted November 29, 2011 что именно отдается нжинксом, если отдается только статика - оставляете правила под нее Да, в общем-то, nginx отдавать может только статику, для того он и создавался. Апача у меня нет, за нжинксом стоит php-fpm через FastCGI. чтобы не городить огород со статическими страницами, можно заглянуть в генерируемый движком хтассес (ведь нам фактически надо переписать правила под другой сервер) и видим В том-то и дело, что ничего полезного мне там нет, почему я и создал этот топик. Там перечислены последовательно правила для всех возможных страниц, я поэтому и спросил, что, мол, для каждой страницы создавать отдельный локейшн? Просто настройка нжинкса и конфиг апача различаются в обработке правил, для апача нет понятия локейшна, он тупо обрабатывает все поступающие запросы, перекидывая php-файлы на интерпретатор PHP и правила реврайта, соответственно, можно перечислять последовательно какие хочешь, все обработает, а нжинкс не будет обрабатывать страницу http://domain.ru/best-sales, если поместить правило rewrite ^/best-sales/$ /best-sales.php last; в локейшн location ~ \.php$ вот и спрашиваю, как делают? Теперь, похоже, сам начинаю понимать, что, наверное, придется каждую из страниц обрабатывать отдельным локешном, потому что как тут написать универсальный локейшн, когда эти страницы именуются простым текстом без какого-либо особого синтаксиса, правило может совпасть с категорией(если использовать метод "без id категории"), например, http://domain.ru/sitemap и http://domain.ru/coats, попробуй раздели их. Может КТО-НИБУДЬ просто выложить рабочий конфиг нжинкса? Что там за ним стоит, PHP-FastCGI или Apache неважно, смогу исправить proxy_pass на fastcgi_pass Link to comment Share on other sites More sharing options...
Ronaldo Perez Posted November 29, 2011 Share Posted November 29, 2011 как я уже сказал выше - все зависит от того что отдает нжинкс, у меня отдает картинки онли, на остальное я не заморачивался и не вникал особо. судя по http://nginx.org/ru/...e.html#location все можно разрулить на уровне общих локейшенов, без прописания правила на каждую страницу, там пример есть П.С. почему ты взялся именно за \.php, если можно обрабатывать / да и судя по Для определения соответствия location'а и запроса сначала проверяются location'ы, заданные обычными строками. Среди них ищется максимальное совпадение. Затем проверяются регулярные выражения. В отличие от обычных строк, они не сортируются, а проверяются в порядке их следования в конфигурационном файле. Проверка регулярных выражений прекращается после первого же совпадения. Если совпадение с регулярным выражением не найдено, то используется конфигурация максимально совпавшего location'а. можно разрулить в рамках одно локейшена вообще, т.к. статичные страницы будут прописаны строками Link to comment Share on other sites More sharing options...
Comrada Posted November 29, 2011 Author Share Posted November 29, 2011 П.С. почему ты взялся именно за \.php, если можно обрабатывать / Потому что у меня с таким локейшном на запросы типа domain.ru/admin123 или любой другой без "/" на конце выдается ошибка "No input file specified", сколько не разбирался, сколько не крутил дрективу "fastcgi_intercept_errors on|off;" ошибка не исчезает, решил, что логичнее будет явно передавать php-fpm'у файлы *.php Курю мануал... очень не хватает знания регулярок((. Все-таки, если у кого есть магазин полностью на нжинксе, выложите конфиг. Link to comment Share on other sites More sharing options...
Comrada Posted December 4, 2011 Author Share Posted December 4, 2011 Решил "проблему" В общем, как и говорил, проблема была в нехвате знаний регулярных выражений и некоторые проблемы в понимании настроек nginx. Переделал конфиг, убрал все лишнее из конфига домена, вынес настройку престы и php-fpm в отдельные файлы, вот что получилось: site.ru.conf server { listen xx.xx.xx.xx:80; server_name site.ru www.site.ru; access_log /var/log/nginx/site.ru_access.log; root /var/www/domains/site.ru/; index index.php index.htm index.html; fastcgi_temp_path /var/cache/nginx/site.ru; access_log on; if ($host = 'site.ru') { rewrite ^/(.*)$ http://www.site.ru/$1 permanent; } include prestashop.conf; include php.conf; location ~*\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpeg|mpg|avi|zip|gz|bz2|rar|bmp|exe|pdf|swf|flv|ico|txt|xml|doc|docx|xls|xlsx|htm|html)$ { root /var/www/domains/site.ru/; } location ~ /\.ht { deny all; } } prestashop.conf rewrite ^/([a-z0-9]+)\-([a-z0-9]+)(\-[_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*)\.jpg$ /img/p/$1-$2$3.jpg last; rewrite ^/([0-9]+)\-([0-9]+)/([_a-zA-Z0-9-]*)\.jpg$ /img/p/$1-$2.jpg last; rewrite ^/([0-9]+)(\-[_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*)\.jpg$ /img/c/$1$2.jpg last; rewrite "^/lang-([a-z]{2})/([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$3&isolang;=$1$5" last; rewrite "^/lang-([a-z]{2})/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$2&isolang;=$1$4" last; rewrite "^/lang-([a-z]{2})/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$ /category.php?id_category=$2&isolang;=$1" last; rewrite ^/([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$2$4 last; rewrite ^/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /product.php?id_product=$1$3 last; rewrite ^/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$ /category.php?id_category=$1 last; rewrite ^/content/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$ /cms.php?id_cms=$1 last; rewrite ^/([0-9]+)__([a-zA-Z0-9-]*)(.*)$ /supplier.php?id_supplier=$1$3 last; rewrite ^/([0-9]+)_([a-zA-Z0-9-]*)(.*)$ /manufacturer.php?id_manufacturer=$1$3 last; rewrite "^/lang-([a-z]{2})/(.*)$ /$2?isolang=$1" last; rewrite ^/page-not-found$ /404.php last; rewrite ^/address$ /address.php last; rewrite ^/addresses$ /addresses.php last; rewrite ^/authentication$ /authentication.php last; rewrite ^/best-sales$ /best-sales.php last; rewrite ^/cart$ /cart.php last; rewrite ^/contacts$ /contact-form.php last; rewrite ^/discount$ /discount.php last; rewrite ^/guest-tracking$ /guest-tracking.php last; rewrite ^/order-history$ /history.php last; rewrite ^/identity$ /identity.php last; rewrite ^/manufacturers$ /manufacturer.php last; rewrite ^/my-account$ /my-account.php last; rewrite ^/new-products$ /new-products.php last; rewrite ^/order$ /order.php last; rewrite ^/order-follow$ /order-follow.php last; rewrite ^/quick-order$ /order-opc.php last; rewrite ^/order-slip$ /order-slip.php last; rewrite ^/password-recovery$ /password.php last; rewrite ^/prices-drop$ /prices-drop.php last; rewrite ^/search$ /search.php last; rewrite ^/sitemap$ /sitemap.php last; rewrite ^/stores$ /stores.php last; rewrite ^/supplier$ /supplier.php last; php.conf location ~ \.php$ { fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; fastcgi_param REDIRECT_STATUS 200; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 24k; fastcgi_buffers 16 24k; fastcgi_busy_buffers_size 24k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } Может кому пригодится. Link to comment Share on other sites More sharing options...
Kerm Posted April 17, 2012 Share Posted April 17, 2012 Сейчас поставил престу на сервер без апача на php-fpm и увидев конфиг представленный выше появились вопросы, а зачем или для чего нужно указывать это: fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; fastcgi_param REDIRECT_STATUS 200; У меня все работает вот с таким кофигом и я просто хочу понять стоит ли мне дописывать эти строчки в него и для чего: location ~ \.php$ { root /var/www/user/data/www/site.ru; fastcgi_connect_timeout 100000s; fastcgi_read_timeout 1000000s; fastcgi_send_timeout 1000000s; fastcgi_buffer_size 64k; fastcgi_buffers 16 64k; fastcgi_param SCRIPT_NAME index.php; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } Link to comment Share on other sites More sharing options...
Kerm Posted April 17, 2012 Share Posted April 17, 2012 И еще вопрос, поскольку на сервере нету апача, то .htaccess файлы не обрабатываются и поскольку php-fpm на некоторые папки стоят права 777...для меня это первый опыт без апача, скажите безопасно ли это? Link to comment Share on other sites More sharing options...
Comrada Posted October 29, 2012 Author Share Posted October 29, 2012 (edited) Всем привет! Вышла преста 1.5, в которой немного изменился механизм вынутренних вызовов и, соответсвенно, URL. Если в версии 1.4 URL был вида /product.php?id_product=4, то теперь URL изменился на /index.php?id_product=4&controller=product Переделал конфиг rewrite ^/([a-z0-9]+)\-([a-z0-9]+)(\-[_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*)\.jpg$ /img/p/$1-$2$3.jpg last; rewrite ^/([0-9]+)\-([0-9]+)/([_a-zA-Z0-9-]*)\.jpg$ /img/p/$1-$2.jpg last; rewrite ^/([0-9]+)(\-[_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*)\.jpg$ /img/c/$1$2.jpg last; rewrite "^/lang-([a-z]{2})/([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /inde.php?id_product=$3&isolang;=$1$5&controller=product" last; rewrite "^/lang-([a-z]{2})/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /index.php?id_product=$2&isolang;=$1$4&controller=product" last; rewrite "^/lang-([a-z]{2})/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$ /index.php?id_category=$2&isolang;=$1&controller=category" last; rewrite ^/([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /index.php?id_product=$2$4&controller=product last; rewrite ^/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /index.php?id_product=$1$3&controller=product last; rewrite ^/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$ /index.php?id_category=$1&controller=category last; rewrite ^/content/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$ /index.php?id_cms=$1&controller=cms last; rewrite ^/([0-9]+)__([a-zA-Z0-9-]*)(.*)$ /index.php?id_supplier=$1$3&controller=supplier last; rewrite ^/([0-9]+)_([a-zA-Z0-9-]*)(.*)$ /index.php?id_manufacturer=$1$3&controller=manufacturer last; rewrite "^/lang-([a-z]{2})/(.*)$ /$2?isolang=$1" last; rewrite ^/page-not-found$ /index.php?controller=404 last; rewrite ^/address$ /index.php?controller=address last; rewrite ^/addresses$ /index.php?controller=addresses last; rewrite ^/authentication$ /index.php?controller=authentication last; rewrite ^/best-sales$ /index.php?controller=best-sales last; rewrite ^/cart$ /index.php?controller=cart last; rewrite ^/contacts$ /index.php?controller=contact-form last; rewrite ^/discount$ /index.php?controller=discount last; rewrite ^/guest-tracking$ /index.php?controller=guest-tracking last; rewrite ^/order-history$ /index.php?controller=history last; rewrite ^/identity$ /index.php?controller=identity last; rewrite ^/manufacturers$ /index.php?controller=manufacturer last; rewrite ^/my-account$ /index.php?controller=my-account last; rewrite ^/new-products$ /index.php?controller=new-products last; rewrite ^/order$ /index.php?controller=order last; rewrite ^/order-follow$ /index.php?controller=order-follow last; rewrite ^/quick-order$ /index.php?controller=order-opc last; rewrite ^/order-slip$ /index.php?controller=order-slip last; rewrite ^/password-recovery$ /index.php?controller=password last; rewrite ^/prices-drop$ /index.php?controller=prices-drop last; rewrite ^/search$ /index.php?controller=search last; rewrite ^/sitemap$ /index.php?controller=sitemap last; rewrite ^/stores$ /index.php?controller=stores last; rewrite ^/supplier$ /index.php?controller=supplier last; Edited October 29, 2012 by Comrada (see edit history) 1 Link to comment Share on other sites More sharing options...
Comrada Posted October 29, 2012 Author Share Posted October 29, 2012 Kerm, не знаю актуально ли еще, давно не читал тему: 1) Я так понимаю, все зависит от продвинутости браузера, в большинстве случаев работать будет и так, эта же большая конструкция просто заполняет HTTP заголовок, чтоб все было совсем уж корректно. Пусть будет. Вообще, все эти параметры прописаны в файле /etc/nginx/fastcgi_params и должны подключаются из основного файла конфиги include fastcgi_params; в случае использования php через fastcgi. Я их просто скопировал в свой файл настройки, чтоб не подключать 3 файла конфиги. 1.1) Читал на Хабре статью, в которой проводилось сравнение производительности высоконагруженного сервера в двух конфигурациях: с работой PHP через порты и через сокеты, так вот результаты показали, что быстрее работает сервер через сокеты, т.е. не: fastcgi_pass 127.0.0.1:9000 а fastcgi_pass unix:/var/run/php-fpm/fcgi.sock; Кроме того, так можно настраивать уровни доступа к сокетам разными фронт-энд серверами, если хостишь несколько разных клиентов. Я у себя поправил. 2) По правам и безопасности пусть выскажутся специалисты Link to comment Share on other sites More sharing options...
Revival Posted October 30, 2012 Share Posted October 30, 2012 (edited) Здравствуйте. Тоже использую на сервере Nginx (без Apache). С правилами пришлось долго помучиться. Весь блок правил перезаписи для страниц можно заменить следующим образом (Prestashop 1.5; Nginx-1.2.4): location / {try_files $uri $uri/ @rewrite;}location @rewrite {rewrite ^/(.*)$ /index.php?q=$1;} Правила для обработки 404 ошибки перенес в секцию server. Правила для изображений примерно такие-же как и у Comrada. Магазин только наполняю, пока ошибок нет. У себя используйте на свой страх и риск. Не забывайте делать резервные копии конфигов. Единственно что мне не нравится это обработка движком 404 ошибки. Если в адрес специально внести ошибку - движок делает переадресацию на ближайший товар. Грешил на неправильно написаный конфиг Nginx для обработки 404 ошибки, но попробовал на локалке с Apache - таже самая картина. Всем ВСЕГО ДОБРОГО! Edited October 30, 2012 by Revival (see edit history) Link to comment Share on other sites More sharing options...
Ronaldo Perez Posted November 1, 2012 Share Posted November 1, 2012 rewrite ^/(.*)$ /index.php?q=$1; это работает? очень сильно сомневаюсь Link to comment Share on other sites More sharing options...
celovec Posted November 7, 2012 Share Posted November 7, 2012 (edited) Решил страницы так же перевести на ЧПУ. Сайт в интернете уже 2 года. Я боюсь что потеряю добавления ЧПУ рейтинги страниц понизятся. Подскажите пожалуйста как делать 301 редирет на ЧПУ с старых страниц. Покажите пожалуйста хотя бы на 1 примере, например: rewrite ^/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /index.php?id_product=$1$3&controller=product last; А дальше я уже сам. Edited November 7, 2012 by celovec (see edit history) Link to comment Share on other sites More sharing options...
arinsall Posted November 7, 2012 Share Posted November 7, 2012 Я делал 301 редирект со старых страниц на новые. Обе страницы на одном сайте. Вот моя запись? RewriteRule ^(.*)vse-dlya-kosmetiki/45-krem-504.htmlhttp://www.moisait.ru/78-krem-704.html [R=301,L] Соответственно подставляем свои данные и все работает. Выделено, обязательные параметры. Между .htmlпробелhttp:// Link to comment Share on other sites More sharing options...
celovec Posted November 7, 2012 Share Posted November 7, 2012 Ваш пример для Apache, у меня же prestashop работает на Nginx без Apache. К сожалению мне ваш пример не подойдет. Link to comment Share on other sites More sharing options...
Comrada Posted November 26, 2012 Author Share Posted November 26, 2012 Решил страницы так же перевести на ЧПУ. Сайт в интернете уже 2 года. Я боюсь что потеряю добавления ЧПУ рейтинги страниц понизятся. Подскажите пожалуйста как делать 301 редирет на ЧПУ с старых страниц. Покажите пожалуйста хотя бы на 1 примере, например: rewrite ^/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ /index.php?id_product=$1$3&controller=product last; А дальше я уже сам. Правильно ли я понял, нужно урл вида site.ru/index.php?id_category=9&controller=category преобразовать в site.ru/9-category-name ? Если так, то средствами одного только nginx будет очень сложно, ведь чпу генерируется на основе seo алиасов, которые задаются при создании того или иного товара или категории, все они уникальные, по сути, это надо для каждой категории и товара прописывать правило реврайта, т.е. для site.ru/index.php?id_category=9&controller=category это может быть например /site.ru/9-shampoo, а для site.ru/index.php?id_product=13&controller=product соответственно site.ru/13-amway-home-loc-chistjashhee-sredstvo-dlja-metallicheskih-poverhnostey.html и как это можно описать регулярными выражениями? или я неправильно понял? Для чего или для кого нужны эти правила реврайта? Если вы боитесь, что ссылки вида index.php?id_category=9 умрут, то это не так, если включен режим чпу, то при переходе по таким ссылкам преста сама перейдет на соответствующей ей ссылке чпу. Link to comment Share on other sites More sharing options...
Kerm Posted November 27, 2012 Share Posted November 27, 2012 Не чего не понизится, даже с включенным ЧПУ, страницы сайта все равно доступны по ссылкам без чпц, т.е. одна и тажа страница будет доступна по двум ссылкам. И по ссылке без ЧПЦ если перейти то будет идти 301 редирект на правильную ссылку что тем же яндексом не запрещается и время не наносит. Link to comment Share on other sites More sharing options...
SummerResident Posted February 1, 2013 Share Posted February 1, 2013 Ваш пример для Apache, у меня же prestashop работает на Nginx без Apache. К сожалению мне ваш пример не подойдет. У себя делал так: if ($request_uri = /КАТЕГОРИЯ/ПОДКАТЕГОРИЯ) { rewrite ^ /НОВАЯ КАТЕГОРИЯ/ permanent;#301 redirect } Link to comment Share on other sites More sharing options...
Kerm Posted February 1, 2013 Share Posted February 1, 2013 Интересная проблема, если юзать Ajax навигацию между страницами в каталоге, то с верху добавляется hash ссылка, но если к этой ссылке добавить значение любое то всеравно сайт отдает 200 ОК. Например там идет /80397118-plavki#/page-3 и изменить значение на http://bikinimal.ru/80397118-plavki#/page-343, т.е на несуществующий номер страницы, то все равно отдается 200 OK, вот как бы сделать 404 или 301 редирект чтобы шел к примеру на главную страницу сайта. Link to comment Share on other sites More sharing options...
qwez Posted March 3, 2014 Share Posted March 3, 2014 А кто сталкивался с проблемой 404 страницы на связке NGINX+php-fpm (без Apache) На Апаче была нормальная страница 404 по шаблону сайта с шапкой, меню и всем остальным. Поставил на конфигу без Апача и теперь 404 стала такой: 404 Not Found nginx Вот мой конфиг: server { listen 80; server_name mydomain.ru; root /var/www/mydomain.ru/web/; index index.php index.html; location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } # Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac). location ~ /\. { deny all; access_log off; log_not_found off; } rewrite ^/api/?(.*)$ /webservice/dispatcher.php?url=$1 last; rewrite ^/([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$1$2$3.jpg last; rewrite ^/([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$1$2$3$4.jpg last; rewrite ^/([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$1$2$3$4$5.jpg last; rewrite ^/([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$1$2$3$4$5$6.jpg last; rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6$7.jpg last; rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7$8.jpg last; rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.jpg last; rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+\.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9$10.jpg last; rewrite ^/c/([0-9]+)(\-[\.*_a-zA-Z0-9-]*)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2$3.jpg last; rewrite ^/c/([a-zA-Z_-]+)(-[0-9]+)?/.+\.jpg$ /img/c/$1$2.jpg last; rewrite ^/images_ie/?([^/]+)\.(jpe?g|png|gif)$ /js/jquery/plugins/fancybox/images/$1.$2 last; rewrite ^/page-not-found$ /index.php?controller=404 last; try_files $uri $uri/ /index.php$is_args$args; error_page 404 /index.php?controller=404; location ~* \.(gif)$ { expires 2592000s; } location ~* \.(jpeg|jpg)$ { expires 2592000s; } location ~* \.(png)$ { expires 2592000s; } location ~* \.(css)$ { expires 604800s; } location ~* \.(js|jsonp)$ { expires 604800s; } location ~* \.(js)$ { expires 604800s; } location ~* \.(ico)$ { expires 31536000s; } location ~ \.php$ { try_files $uri =404; include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors on; } } Если прописать error_page 404 /404.html, то будет именно 404.html отображаться. Т.е. проблема в том, что Nginx не хочет отображать нормально /index.php?controller=404. Кто подскажет как исправить? Link to comment Share on other sites More sharing options...
Kerm Posted March 4, 2014 Share Posted March 4, 2014 Правильным конфигом nginx.. Link to comment Share on other sites More sharing options...
alpiua Posted September 9, 2015 Share Posted September 9, 2015 (edited) Всем привет. Тестирую рабочий сайт на nginx+php-fpm. Вроде всё неплохо, но после смены домена через админку получаю такое предупреждение: Перед использованием этой утилиты, вам нужно- Создать пустой файл .htaccess в вашем корневом каталоге.- Дать разрешение на запись (CHMOD 666 в системе Unix). Хтаксес конечно есть, права на запись стоят. В location nginxa на время тестов выставил: location ~ /\.ht { allow all; } в логе ошибка: FastCGI sent in stderr: "PHP message: PHP Warning: file_put_content(site.ua/config/xml /default_country_modules_list.xml): failed to open stream: Permission denied in /var/www/site.ua/classes/controller/AdminController.php on line 1926 итог - не могу включить ЧПУ. Права вроде правильные стоят на файлы/папки. Кто-то может подсказать ? Edited September 9, 2015 by alpik (see edit history) Link to comment Share on other sites More sharing options...
alpiua Posted September 9, 2015 Share Posted September 9, 2015 (edited) ларчик просто открывался. В ядро Centos 7 встроена надстройка SElinux, которая пока не очень видимо дружит с nginx, в консоли setenforce permissive Edited September 11, 2015 by alpik (see edit history) Link to comment Share on other sites More sharing options...
Kerm Posted September 9, 2015 Share Posted September 9, 2015 А можно вообще отключить SElinux Link to comment Share on other sites More sharing options...
alpiua Posted September 10, 2015 Share Posted September 10, 2015 можно. ещё можно поставить 777 на всё и удалить пароль для рута. вот только зачем ? http://stopdisablingselinux.com/ 1 Link to comment Share on other sites More sharing options...
alpiua Posted September 13, 2015 Share Posted September 13, 2015 У кого-то есть правила рерайта для модуля Advanced Search 4 ? Уже 3й день не получается настроить .. Link to comment Share on other sites More sharing options...
SummerResident Posted September 15, 2015 Share Posted September 15, 2015 (edited) Может кому поможет мой Nginx (от версии 1.5 другого своего магазина поставил на 1.6, вроде полет нормальный). В коде слова ВАШСАЙТ и ВАШIP замените на свои, соответственно ) Может мусора и много, но работает ) #user 'user' virtual host 'ВАШСАЙТ.ru' configuration file server { server_name ВАШСАЙТ.ru www.ВАШСАЙТ.ru; charset off; disable_symlinks if_not_owner from=$root_path; index index.html index.php; root $root_path; set $root_path /var/www/user/data/www/ВАШСАЙТ.ru; access_log /var/www/httpd-logs/ВАШСАЙТ.ru.access.log ; error_log /var/www/httpd-logs/ВАШСАЙТ.ru.error.log notice; listen ВАШIP:80; include /etc/nginx/vhosts-includes/*.conf; # ПРАВИЛА ДЛЯ ПРЕСТАШОП 1.5 location ~* \.(js|css|gif|png|jpeg) { add_header Cache-Control "public, max-age=604800"; } location ~* \.jpg { add_header Cache-Control "public, max-age=604800"; rewrite "^/c/([0-9]+)(\-[_a-zA-Z0-9-]*)/(.*)\.jpg$" /img/c/$1$2.jpg break; rewrite "^/c/([_a-zA-Z-]+)/(.*)\.jpg$" /img/c/$1.jpg break; rewrite "^/([a-z0-9]+)\-([a-z0-9]+)(\-[_a-zA-Z0-9-]*)/(\P{M}\p{M}*)*\.jpg$" /img/p/$1-$2$3.jpg break; rewrite "^/([0-9]+)\-([0-9]+)/(\P{M}\p{M}*)*\.jpg$" /img/p/$1-$2.jpg break; rewrite "^/([0-9])(\-[_a-zA-Z0-9-]*)?/(\P{M}\p{M}*)*\.jpg$" /img/p/$1/$1$2.jpg break; rewrite "^/([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?/(\P{M}\p{M}*)*\.jpg$" /img/p/$1/$2/$1$2$3.jpg break; rewrite "^/([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?/(\P{M}\p{M}*)*\.jpg$" /img/p/$1/$2/$3/$1$2$3$4.jpg break; rewrite "^/([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?/(\P{M}\p{M}*)*\.jpg$" /img/p/$1/$2/$3/$4/$1$2$3$4$5.jpg break; rewrite "^/([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?/(\P{M}\p{M}*)*\.jpg$" /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6.jpg break; rewrite "^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?/(\P{M}\p{M}*)*\.jpg$" /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7.jpg break; rewrite "^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?/(\P{M}\p{M}*)*\.jpg$" /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8.jpg break; rewrite "^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?/(\P{M}\p{M}*)*\.jpg$" /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$8$9.jpg break; } location / { if ($arg_link_rewrite != "") { rewrite ^/(.+) http://$host/$1? permanent; } # ПРАВИЛА ДЛЯ ПРЕСТАШОП 1.5 rewrite ^/api/?(.*)$ /webservice/dispatcher.php?url=$1 last; rewrite "^/([0-9]+)\-(\P{M}\p{M}*)+\.html(.*)$" /index.php?controller=product&id_product=$1$3 last; rewrite "^/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$" /index.php?controller=category&id_category=$1$3 last; rewrite "^/([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$" /index.php?controller=product&id_product=$2$4 last; rewrite "^/([0-9]+)__([a-zA-Z0-9-]*)(.*)$" /index.php?controller=supplier&id_supplier=$1$3 last; rewrite "^/([0-9]+)_([a-zA-Z0-9-]*)(.*)$" /index.php?controller=manufacturer&id_manufacturer=$1$3 last; rewrite "^/content/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$" /index.php?controller=cms&id_cms=$1$3 last; rewrite "^/content/category/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$" /index.php?controller=cms&id_cms_category=$1$3 last; rewrite "^/module/([_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*)$" /index.php?fc=module&module=$1&controller=$2 last; rewrite ^/page-non-trouvee$ /index.php?controller=404 last; rewrite ^/adresse$ /index.php?controller=address last; rewrite ^/adresses$ /index.php?controller=addresses last; rewrite ^/authentification$ /index.php?controller=authentication last; rewrite ^/meilleures-ventes$ /index.php?controller=best-sales last; rewrite ^/panier$ /index.php?controller=cart last; rewrite ^/contactez-nous$ /index.php?controller=contact-form last; rewrite ^/bons-de-reduction$ /index.php?controller=discount last; rewrite ^/suivi-commande-invite$ /index.php?controller=guest-tracking last; rewrite ^/historique-des-commandes$ /index.php?controller=history last; rewrite ^/identite$ /index.php?controller=identity last; rewrite ^/manufacturers$ /index.php?controller=manufacturer last; rewrite ^/mon-compte$ /index.php?controller=my-account last; rewrite ^/nouveaux-produits$ /index.php?controller=new-products last; rewrite ^/commande$ /index.php?controller=order last; rewrite ^/details-de-la-commande$ /index.php?controller=order-follow last; rewrite ^/commande-rapide$ /index.php?controller=order-opc last; rewrite ^/avoirs$ /index.php?controller=order-slip last; rewrite ^/mot-de-passe-oublie$ /index.php?controller=password last; rewrite ^/promotions$ /index.php?controller=prices-drop last; rewrite ^/recherche$ /index.php?controller=search last; rewrite ^/plan-du-site$ /index.php?controller=sitemap last; rewrite ^/magasins$ /index.php?controller=stores last; rewrite ^/supplier$ /index.php?controller=supplier last; rewrite ^/page-not-found$ /index.php?controller=404 last; rewrite ^/address$ /index.php?controller=address last; rewrite ^/addresses$ /index.php?controller=addresses last; rewrite ^/authentication$ /index.php?controller=authentication last; rewrite ^/best-sales$ /index.php?controller=best-sales last; rewrite ^/cart$ /index.php?controller=cart last; rewrite ^/contacts$ /index.php?controller=contact-form last; rewrite ^/discount$ /index.php?controller=discount last; rewrite ^/guest-tracking$ /index.php?controller=guest-tracking last; rewrite ^/order-history$ /index.php?controller=history last; rewrite ^/identity$ /index.php?controller=identity last; rewrite ^/manufacturers$ /index.php?controller=manufacturer last; rewrite ^/my-account$ /index.php?controller=my-account last; rewrite ^/new-products$ /index.php?controller=new-products last; rewrite ^/order$ /index.php?controller=order last; rewrite ^/order-follow$ /index.php?controller=order-follow last; rewrite ^/quick-order$ /index.php?controller=order-opc last; rewrite ^/order-slip$ /index.php?controller=order-slip last; rewrite ^/password-recovery$ /index.php?controller=password last; rewrite ^/prices-drop$ /index.php?controller=prices-drop last; rewrite ^/search$ /index.php?controller=search last; rewrite ^/sitemap$ /index.php?controller=sitemap last; rewrite ^/stores$ /index.php?controller=stores last; rewrite ^/supplier$ /index.php?controller=supplier last; rewrite ^/c/([a-zA-Z_-]+)(-[0-9]+)?/.+.jpg$ /img/c/$1$2.jpg last; # ЗАКОНЧЕНЫ ПРАВИЛА ДЛЯ ПРЕСТАШОП 1.5 if ( !-e $request_filename ) { rewrite (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ /index.php last; break; } # ЗАКОНЧЕНЫ ПРАВИЛА ПРЕСТАШОП 1.5 location ~ [^/]\.ph(p\d*|tml)$ { try_files /does_not_exists @php; } } location @php { fastcgi_index index.php; fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f webmaster@ВАШСАЙТ.ru"; fastcgi_pass unix:/var/www/php-fpm/user.sock; fastcgi_split_path_info ^((?U).+\.ph(?\d*|tml))(/?.+)$; try_files $uri =404; include fastcgi_params; } } Edited September 15, 2015 by SummerResident (see edit history) Link to comment Share on other sites More sharing options...
Kerm Posted September 16, 2015 Share Posted September 16, 2015 (edited) Вот, если интересно, инструкция как настроить nginx и php-fpm для prestashop 1.6.x http://prestashop24.ru/2015/09/16/настройки-nginx-и-php-fpm-для-prestashop-1-6-x/ Edited September 16, 2015 by Kerm (see edit history) Link to comment Share on other sites More sharing options...
agasfer Posted July 27, 2017 Share Posted July 27, 2017 Более кривого алгоритма не встречал (хотя нет: видел такое уродство). БАГИ ЧПУ и вообще урлов Prestashop: Пользователь может "прописывать-не прописывать" обязательные параметры - идеотизм! - баг! Ссылка на товар формируется без полного пути (по умолчанию) - где категория, без которой нет полного урла? - это SEO баг! При включении ЧПУ и попытке исправить баг выше добавляем доступные (не для программиста) {category}/ или {categories}/ к урлу товара и лезет очередной баг формирования ссылки на товар: алиас-категории/товарная-ссылка-с-допами, При этом ссылка на категорию идет с ID(а тут нет), и при обрезании урла(/товарная-ссылка-с-допами - сокращаем (как положено)) имеем ссылку /алиас-категории и !желанную 404 ошибку, т.к. ссылка на саму категорию имеет вид: ID-алиас-категории (или что иное, но ID - ОБЯЗАТЕЛЬНЫЙ параметр, выброшенный из товарной ссылки!). Дальше даже не буду писать какие баги, т.к. СМС по факту платная(кроме кривого ядра) для большинства пользователей и это хамство иметь столько косяков в продакшене - установил, поковырял, зае..ся править косяки - которые в престе не называют косяками, а отсутствием купленного плагина или ещё чего. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now