• Редирект с GET запроса на ЧПУ?

    JastaFly
    @JastaFly Автор вопроса
    dodo512,

    Может где-то выше есть ещё .htaccess и RewriteOptions

    Да вроде нет. Попробовал поискать по проекту RewriteOptions, IDE ничего не нашла

    Ещё вариант попробовать убрать ? и добавить флаг QSD.

    А вот это вот сработало! Сейчас правило выглядит так:
    RewriteCond %{QUERY_STRING} ^(brand)=([^&]+)$
    RewriteRule ^(en/)?catalog/(.+/)?$ /$0%1/%2/ [R=301,L,QSD]

    Спасибо, за помощь)
    Написано
  • Редирект с GET запроса на ЧПУ?

    JastaFly
    @JastaFly Автор вопроса
    dodo512,

    Тогда остается подробнее смотреть содержимое
    /home/bitrix/ext_www/my-site.ru/.htaccess

    Вот он:
    Options -Indexes 
    ErrorDocument 404 /404.php
    
    <IfModule mod_php5.c>
    	php_flag allow_call_time_pass_reference 1
    	php_flag session.use_trans_sid off
    </IfModule>
    
    <IfModule mod_rewrite.c>
        RewriteCond %{HTTP_HOST} ^www.my-site.ru
        RewriteCond %{REQUEST_URI} !1c_exchange.php
        RewriteCond %{REQUEST_URI} !1c_import_xml.php
        RewriteRule (.*) https://my-site.ru/$1 [R=301,L]
    	# Редиректы для адресов без слеша в конце, на адреса со слешем
    	RewriteCond %{REQUEST_FILENAME} !-f
    	RewriteCond %{REQUEST_FILENAME} !-l
    	RewriteCond %{REQUEST_FILENAME} !-d
    	RewriteCond %{REQUEST_URI} ^(.*/[^/\.]+)$
    	RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1/ [R=301,L]
    	# Редирект со страниц с **/index.(html|php), на страницы без index.(html|php)
    	RewriteRule ^index\.(html|php)$ https://%{HTTP_HOST} [R=301,L]
    	RewriteRule ^(.*)/index\.(html|php)$ https://%{HTTP_HOST}/$1/ [R=301,L]
    	RewriteRule ^manufacturers/(.*)/(.*)\.(.*)(.*)+$ https://%{HTTP_HOST}/manufacturers/$1/ [R=301,L]
    
    	Options +FollowSymLinks
    	RewriteEngine On
        # Редиреты со старых брендовых страниц каталога а GET-запросами, на новые с ЧПУ
    	RewriteCond %{QUERY_STRING} ^(brand)=([^&]+)$
        RewriteRule ^(en/)?catalog/(.+/)?$ /$0%1/%2/? [R=301,L]
    
        RewriteCond %{QUERY_STRING} ^(trade-company)=([^&]+)$
        RewriteRule ^(en/)?catalog/(.+/)?$ /$0%1/%2/? [R=301,L]
    
    	RewriteCond %{REQUEST_FILENAME} !-f
    	RewriteCond %{REQUEST_FILENAME} !-l
    	RewriteCond %{REQUEST_FILENAME} !-d
    	RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
    	RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]
    	RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
    
        RewriteCond %{THE_REQUEST} /(.*)index.php.*$
        RewriteCond %{THE_REQUEST} !bitrix/admin/
        RewriteRule (.*) https://%{HTTP_HOST}/%1 [R=301,L]
    	Redirect 301 /favorites/ /order-template/
    </IfModule>
    
    <IfModule mod_dir.c>
    	DirectoryIndex index.php index.html
    </IfModule>
    
    <IfModule mod_expires.c>
    	ExpiresActive on
    	ExpiresByType image/jpeg "access plus 3 day"
    	ExpiresByType image/gif "access plus 3 day"
    </IfModule>
    <Files phpunit>
        Order Deny,Allow
        Deny from all
    </Files>
    <Files README.md>
        Order Deny,Allow
        Deny from all
    </Files>
    <Files Makefile>
        Order Deny,Allow
        Deny from all
    </Files>
    <Files composer.json>
        Order Deny,Allow
        Deny from all
    </Files>

    на всех серверах файл идентичен
    Написано
  • Редирект с GET запроса на ЧПУ?

    JastaFly
    @JastaFly Автор вопроса
    dodo512,
    а вот ещё конфиг с локалки:
    Listen 127.0.0.1:8888
    <VirtualHost 127.0.0.1:8888>
    	ServerAdmin webmaster@localhost
    	DocumentRoot /home/bitrix/www
    
    	<Directory />
    		Options FollowSymLinks
    		AllowOverride None
    	</Directory>
    
    	<DirectoryMatch .*\.svn/.*>
    		 Require all denied
    	</DirectoryMatch>
    
    	<DirectoryMatch .*\.git/.*>
    		 Require all denied
    	</DirectoryMatch>
    
    	<DirectoryMatch .*\.hg/.*>
    		 Require all denied
    	</DirectoryMatch>
    
    	<Directory /home/bitrix/www/>
    		Options FollowSymLinks MultiViews
    		AllowOverride All
    		DirectoryIndex index.php index.html index.htm
    		php_admin_value session.save_path /tmp/php_sessions/www
    		php_admin_value upload_tmp_dir /tmp/php_upload/www
            Require all granted
    	</Directory>
    
    	<Directory /home/bitrix/www/bitrix/cache>
    		AllowOverride none
            Require all denied
    	</Directory>
    
    	<Directory /home/bitrix/www/bitrix/managed_cache>
    		AllowOverride none
            Require all denied
    	</Directory>
    
    	<Directory /home/bitrix/www/bitrix/local_cache>
    		AllowOverride none
            Require all denied
    	</Directory>
    
    	<Directory /home/bitrix/www/bitrix/stack_cache>
    		AllowOverride none
            Require all denied
    	</Directory>
    
    	<Directory /home/bitrix/www/upload>
    		AllowOverride none
    		AddType text/plain php,php3,php4,php5,php6,phtml,pl,asp,aspx,cgi,dll,exe,ico,shtm,shtml,fcg,fcgi,fpl,asmx,pht
    		php_value engine off
    	</Directory>
    
    	<Directory /home/bitrix/www/upload/support/not_image>
    		AllowOverride none
            Require all denied
    	</Directory>
    
    	<Directory /home/bitrix/www/bitrix/images>
    		AllowOverride none
    		AddType text/plain php,php3,php4,php5,php6,phtml,pl,asp,aspx,cgi,dll,exe,ico,shtm,shtml,fcg,fcgi,fpl,asmx,pht
    		php_value engine off
    	</Directory>
    
    	<Directory /home/bitrix/www/bitrix/tmp>
    		AllowOverride none
    		AddType text/plain php,php3,php4,php5,php6,phtml,pl,asp,aspx,cgi,dll,exe,ico,shtm,shtml,fcg,fcgi,fpl,asmx,pht
    		php_value engine off
    	</Directory>
    
    	ErrorLog logs/error_log
    	# Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
    	LogLevel warn
    
    	CustomLog logs/access_log combined
    
    	<IfModule mod_rewrite.c>
    		#Nginx should have "proxy_set_header HTTPS YES;" in location
    		RewriteEngine On
    		RewriteCond %{HTTP:HTTPS} =YES
    		RewriteRule .* - [E=HTTPS:on,L]
    	</IfModule>
    </VirtualHost>
    Написано
  • Редирект с GET запроса на ЧПУ?

    JastaFly
    @JastaFly Автор вопроса
    dodo512,

    Нужно глянуть на тестовом сервере что в

    Вот нашёл на тесте:
    # Ansible managed
    # site: my-site
    <VirtualHost 127.0.0.1:8887>
        ServerName  my-site
    	ServerAlias www.my-site
        	ServerAdmin webmaster@localhost
    	DocumentRoot  /home/bitrix/ext_www/my-site.ru
    
    	ErrorLog logs/my-site_error_log
    	LogLevel warn
    	CustomLog logs/my-site_access_log combined
    
    	<IfModule mod_rewrite.c>
    		#Nginx should have "proxy_set_header HTTPS YES;" in location
    		RewriteEngine On
    		RewriteCond %{HTTP:HTTPS} =YES
    		RewriteRule .* - [E=HTTPS:on,L]
    	</IfModule>
    
         
    
    	<Directory />
    		Options FollowSymLinks
    		AllowOverride None
    	</Directory>
    
    	<DirectoryMatch .*\.svn/.*>
            Require all denied
    	</DirectoryMatch>
    
    	<DirectoryMatch .*\.git/.*>
    		 Require all denied
    	</DirectoryMatch>
    
    	<DirectoryMatch .*\.hg/.*>
    		 Require all denied
    	</DirectoryMatch>
    
    	<Directory /home/bitrix/ext_www/my-site.ru>
    		Options FollowSymLinks MultiViews
    		AllowOverride All
    		DirectoryIndex index.php index.html index.htm
    
            Require all granted
            
            #php_admin_value session.save_path /tmp/php_sessions/ext_www/my-site
            php_admin_value upload_tmp_dir    /tmp/php_upload/ext_www/my-site
    	</Directory>
    
    	<Directory /home/bitrix/ext_www/my-site.ru/bitrix/cache>
    		AllowOverride none
            Require all denied
    	</Directory>
    
    	<Directory /home/bitrix/ext_www/my-site.ru/bitrix/managed_cache>
    		AllowOverride none
            Require all denied
    	</Directory>
    
    	<Directory /home/bitrix/ext_www/my-site.ru/bitrix/local_cache>
    		AllowOverride none
            Require all denied
    	</Directory>
    
    	<Directory /home/bitrix/ext_www/my-site.ru/bitrix/stack_cache>
    		AllowOverride none
            Require all denied
    	</Directory>
    
    	<Directory /home/bitrix/ext_www/my-site.ru/upload>
    		AllowOverride none
    		AddType text/plain php,php3,php4,php5,php6,phtml,pl,asp,aspx,cgi,dll,exe,ico,shtm,shtml,fcg,fcgi,fpl,asmx,pht
    		php_value engine off
    	</Directory>
    
    	<Directory /home/bitrix/ext_www/my-site.ru/upload/support/not_image>
    		AllowOverride none
            Require all denied
    	</Directory>
    
    	<Directory /home/bitrix/ext_www/my-site.ru/bitrix/images>
    		AllowOverride none
    		AddType text/plain php,php3,php4,php5,php6,phtml,pl,asp,aspx,cgi,dll,exe,ico,shtm,shtml,fcg,fcgi,fpl,asmx,pht
    		php_value engine off
    	</Directory>
    
    	<Directory /home/bitrix/ext_www/my-site.ru/bitrix/tmp>
    		AllowOverride none
    		AddType text/plain php,php3,php4,php5,php6,phtml,pl,asp,aspx,cgi,dll,exe,ico,shtm,shtml,fcg,fcgi,fpl,asmx,pht
    		php_value engine off
    	</Directory>
    
    </VirtualHost>
    Написано
  • Редирект с GET запроса на ЧПУ?

    JastaFly
    @JastaFly Автор вопроса
    dodo512,

    в заголовках ответов Server: nginx, а не Server: Apache

    Ну да. Просто странно почему на тесте Nginx возвращает редиректнутый URL, а на локалке нет?!
    Тем не менее я нашёл порты на которых весит апач. 8887 на тесте:
    HTTP/1.1 301 Moved Permanently
    Date: Wed, 08 May 2024 12:59:55 GMT
    Server: Apache
    Location: http://127.0.0.1:8887/catalog/elektroinstrument/brand/bahco/%3f
    Connection: close
    Content-Type: text/html; charset=iso-8859-1

    и 8888 на локалке:
    HTTP/1.1 301 Moved Permanently
    Date: Thu, 02 May 2024 11:30:58 GMT
    Server: Apache
    Location: http://127.0.0.1:8888/catalog/elektroinstrument/brand/bahco/
    Connection: close
    Content-Type: text/html; charset=iso-8859-1
    Написано
  • Редирект с GET запроса на ЧПУ?

    JastaFly
    @JastaFly Автор вопроса
    dodo512,

    Посмотреть на каком порту слушает Apache

    По дефолту на 80-ом
    Сделала запрос на тесте:
    curl -I 'http://127.0.0.1:80/en/catalog/bdsm-kostumi/maski-s-klapom/?brand=microsoft'

    Получил ответ:
    HTTP/1.1 301 Moved Permanently
    Server: nginx
    Date: Wed, 08 May 2024 12:38:28 GMT
    Content-Type: text/html; charset=iso-8859-1
    Connection: keep-alive
    Location: http://127.0.0.1/en/catalog/bdsm-kostumi/maski-s-klapom/brand/microsoft/%3f
    X-Content-Type-Options: nosniff
    X-Frame-Options: SAMEORIGIN

    Повторил тот-же запрос на локалке:
    HTTP/1.1 301 Moved Permanently
    Server: nginx
    Date: Thu, 02 May 2024 11:07:40 GMT
    Content-Type: text/html
    Content-Length: 162
    Connection: keep-alive
    Location: https://127.0.0.1/en/catalog/bdsm-kostumi/maski-s-klapom/?brand=microsoft
    X-Content-Type-Options: nosniff
    X-Frame-Options: SAMEORIGIN

    выходит какая-то странная фигня, на локалке в отличии от теста локэйшен не поменялся, хотя в заголовке стоит код ответа 301. Хотя при использовании браузера редирект срабатывает и адрес меняется. Что за магия?!
    Написано
  • Редирект с GET запроса на ЧПУ?

    JastaFly
    @JastaFly Автор вопроса
    dodo512,

    Используется один Apache или связка Nginx + Apache

    Связка, Apache для работы с PHP, Nginx для статики

    какой версии

    Версии апача на тесте:
    Server version: Apache/2.4.6 (CentOS)
    Server built:   Apr  5 2023 17:18:30

    и на локалке:
    Server version: Apache/2.4.6 (CentOS)
    Server built:   May 30 2023 14:01:11

    совпадают. А вот Nginx отличается на тесте:
    nginx version: nginx/1.20.2
    на локалке:
    nginx version: nginx/1.24.0
    Написано
  • Редирект с GET запроса на ЧПУ?

    JastaFly
    @JastaFly Автор вопроса
    dodo512,

    .htaccess на тестовом сервере?

    Всё тоже самое что и на локальном

    Может там лишний /

    Нет, правило на тестовом выглядит точно так-же:
    RewriteCond %{QUERY_STRING} ^(brand)=([^&]+)$
    RewriteRule ^(en/)?catalog/(.+/)?$ /$0%1/%2/? [R=301,L]
    Написано
  • Редирект с GET запроса на ЧПУ?

    JastaFly
    @JastaFly Автор вопроса
    dodo512 теперь нарисовалась новая проблема. Залил свои правки на тестовый сервер и редирект там работает, но ведёт на такие адреса:
    https://my-site.ru/en/catalog/bdsm-kostumi/maski-s-klapom/brand/microsoft/?/

    то есть в конце почему-то появляется знак вопрос. При чём на локалке у меня всё работает как надо, никаких тебе знаков вопроса. Пробовал сбрасывать кэш на тестовом сайте, режим инкогнито, всё без полезно на тестовом серсере знак вопроса в конце есть, на локалке нет. Подскажите в чём тут может быть дело?
    Написано
  • Редирект с GET запроса на ЧПУ?

    JastaFly
    @JastaFly Автор вопроса
    dodo512, спасибо сработало)
    Так-же заметил ещё заметил что данный редирект не будет работать для корневых страниц каталога:
    https://my-site.ru/catalog/?brand=microsoft
    Поправил его ещё и под этот кейс:
    RewriteCond %{QUERY_STRING} ^(brand)=([^&]+)$
    RewriteRule ^(en/)?catalog/(.+/)?$ /$0%1/%2/? [R=301,L]
    Написано
  • Редирект с GET запроса на ЧПУ?

    JastaFly
    @JastaFly Автор вопроса
    dodo512, появились новые условия для редиректа. Дело в том что сайт биязычный и русская версия каталога находится по этому адресу:
    https://my-site.ru/catalog/
    а соответствующая ему английская по адресу:
    https://my-site.ru/en/catalog/
    Можете пожалуйста подсказать как модифицировать данное правило:
    RewriteCond %{QUERY_STRING} ^(brand)=([^&]+)$
    RewriteRule ^catalog/.+/$ /$0%1/%2/? [R=301,L]

    чтобы редирект с русской версии сайта:
    https://my-site.ru/catalog/bdsm-kostumi/maski-s-klapom/?brand=microsoft

    вел на русскую версию ЧПУ:
    https://my-site.ru/catalog/bdsm-kostumi/maski-s-klapom/brand/microsoft/

    а редирект с английской версии сайта:
    https://my-site.ru/en/catalog/bdsm-kostumi/maski-s-klapom/?brand=microsoft

    соответственно вёл на английскую:
    https://my-site.ru/en/catalog/bdsm-kostumi/maski-s-klapom/brand/microsoft/

    или может быть есть другие варианты как решить эту задачу?
    Написано
  • Битрикс ошибка Mysql connect error [localhost]: (2002) No such file or directory (400)?

    JastaFly
    @JastaFly Автор вопроса
    UNiT LAB,
    Значит конкретно у Вас проблема не в порте или порт другой. Данная ошибка говорит о том что Битрикс никак не может подрубиться к БД и это может случиться по разным причинам: может как у меня порт указан неверно, может имя БД указано неверно, может быть вообще БД не существует, короче причин может быть масса ищите свою. Для начала попробуйте у просто подрубиться к базе через консоль, чтобы убедиться что все данные в конфиге указаны верно. Далее пробуйте узнать адрес и порт по которым до неё можно достучаться
    Написано
  • Редирект с GET запроса на ЧПУ?

    JastaFly
    @JastaFly Автор вопроса
    dodo512,

    нужно ставить правило редиректа в начало файла .htaccess чтобы редирект был выше остальных правил.

    Ну да, переставил правило повыше сразу после RewriteEngine On и оно заработало. Ещё немного модифицировал его чтобы не было привязки к конкретному адресу и оно могло одновременно работать как на тесте, так и в проде:
    RewriteCond %{QUERY_STRING} ^(brand)=([^&]+)$
    RewriteRule ^catalog/.+/$ /$0%1/%2/? [R=301,L]
    Написано
  • Редирект с GET запроса на ЧПУ?

    JastaFly
    @JastaFly Автор вопроса
    dodo512 не срабатывает. Зато работает вот такой вариант:
    RewriteEngine on
    RewriteCond %{QUERY_STRING} (^|&)brand=([-0-9a-z]+)
    RewriteRule (.*[^/])/*$ /$1/brand/%2/? [R=301]

    Правда вместо модифицированного исходного урла он ведёт на файл роутинга Битрикса:
    https://my-site.ru/bitrix/urlrewrite.php/brand/microsoft/
    Написано
  • Функция str_replace() не работает?

    JastaFly
    @JastaFly Автор вопроса
    Виктор,

    видимо некорректно попробовали,

    Всё было корректно, но данная функция не позволила мне избавиться от всех кодов HTML символов, некоторые всё равно проскальзывали
    Написано
  • Функция str_replace() не работает?

    JastaFly
    @JastaFly Автор вопроса
    Сергей delphinpro, не пойдёт, встречаются символьные коды и без амперсанда
    Написано
  • Функция str_replace() не работает?

    JastaFly
    @JastaFly Автор вопроса
    @ipatiev

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

    Прекрасная мысль! Сейчас-же хватайте свою линеечку и направляйтесь в офис к разработчикам Битрикса, чтобы нещадно высечь всех причастных к созданию данной говноCMSки. Тысячи PHPшников будут чтить Вас в веках за сей подвиг!
    Написано
  • Функция str_replace() не работает?

    JastaFly
    @JastaFly Автор вопроса
    Ипатьев,

    Исправлять надо всегда причину, а не следствие.

    Чтобы исправить причину нужно зачистить от этих символов базу с сотнями тысяч товаров и перелопатить часть ядра Битрикса отвечающую за выгрузку товаров. Я понимаю для бешеной собаки 100 вёрст не крюк, но мне есть чем ещё заняться
    Написано
  • Функция str_replace() не работает?

    JastaFly
    @JastaFly Автор вопроса
    Сергей delphinpro, nokimaro,
    Всё так, написал простенький метод, чтобы вычищать всё это из строк:
    public function clearFromHtmlSpecificChars(string $text): string
        {
            $search = ['&lt;', '&gt;', '&quot;', '&apos;', '&amp;', 'quot;', 'amp;'];
            $replace = ['', '', '', '', '', '', ''];
    
            return str_replace($search, $replace, $text);
        }
    Написано
  • Функция str_replace() не работает?

    JastaFly
    @JastaFly Автор вопроса
    Виктор пробовал, не помогло
    Написано