Ответы пользователя по тегу htaccess
  • Как сделать редирект в opencart файл .htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    и правильно сделали
    GET не является частью урла, по этому его невозможно выделить ;)

    # 301 --- http://site.ru/ndex.php?route=product/category&path=146$ => http://site.ru/dlya-reklami/komplekruyuschie-i-konnektori
    RewriteCond %{QUERY_STRING} (^|&)route\=product/category($|&)
    RewriteCond %{QUERY_STRING} (^|&)path\=146\$($|&)
    RewriteRule ^ndex\.php$ /dlya-reklami/komplekruyuschie-i-konnektori? [L,R=301]

    Вопрос в конце урла удалит GET
    Если урлов много
    https://donatstudios.com/RewriteRule_Generator
    Ответ написан
    Комментировать
  • Как сделать редиректы по UTM-метке в .htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    GET - не является частью урла и в реврайт рул он не попадает вовсе
    https://www.generateit.net/mod-rewrite/index.php
    Ответ написан
  • Правильно ли составлен редирект?

    shambler81
    @shambler81 Куратор тега htaccess
    Последние обмены битрикс работает с https.

    ############################################################################
    #### Стандартный .htaccess для проектов студии Клондайк, версия 4.2     ####
    ############################################################################
    RewriteEngine On
       #  Директива включает редиректы.
    RewriteBase / 
       # Без директивы (.*) = /$1 будет /var/wwww/site/web/$1  с директивой  = /$1
    Options +FollowSymLinks
       # Разрешает переход по символическим ссылкам.
    php_flag display_errors off
      # запретить отображение ошибок  (требование монитора качества)
    php_flag allow_url_fopen off
      # запретить  использовать удаленые файлы (требование проактивной защиты)
    
    ############################################################################
    #### Выбор основного зеркала (с www или без www)                        ####
    ############################################################################
        # 1. Удалить www
    RewriteCond %{ENV:HTTPS} on
        #Если включен https
    RewriteRule .* - [E=SSL:s]
        #То создаем переменную  ssl с текстом s
    RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
        # Проверяем, содержит ли домен www в начале URL.
    RewriteRule ^(.*)$ http%{ENV:SSL}://%1/$1 [R=301,L]
        # Перенаправляем удаляем www
    
        # 2. Добавить www
    #RewriteCond %{ENV:HTTPS} on
        #Если включен https
    #RewriteRule .* - [E=SSL:s]
        #То создаем переменную  ssl с текстом s
    #RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
        # Если нет www в начале домена
    #RewriteRule ^(.*)$ http%{ENV:SSL}://www.%{HTTP_HOST}/$1 [R=301,L]
        #Подставляем www и https если он включен.
    
    ############################################################################
    #### Перенаправляем протокол https на http                              ####
    ############################################################################
    #RewriteCond %{HTTPS} on
       # Проверяем наличие https в URL.
    #RewriteRule ^.*$ http://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
       # Перенаправляем протокол на http.
    
    ############################################################################
    #### Перенаправляем протокол http на https                              ####
    ############################################################################
    RewriteCond %{HTTPS} !on
       # Проверяем наличие https в URL.
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
       # Перенаправляем протокол на http.
    
    ############################################################################
    #### Убираем index.php, если он есть в конце URL                        ####
    ############################################################################
    RewriteCond %{REQUEST_URI} ^(.*)/index\.php$
       # URL cодержит index.php в конце.
    RewriteRule ^(.*)$ %1/ [R=301,L]
       # Удалить index.php из URL.
    
    ############################################################################
    #### Убираем повторяющиеся слеши (/) в URL                              ####
    ############################################################################
    RewriteCond %{THE_REQUEST} //
       # Проверяем, повторяется ли слеш (//) более двух раз.
    RewriteRule .* /$0 [R=301,L]
       # Исключаем все лишние слеши.
    
    ############################################################################
    #### Убираем слеши в конце URL для статических файлов (содержит точку)  ####
    ############################################################################
    RewriteCond %{REQUEST_URI} \..+$
       # Если файл содержит точку.
    RewriteCond %{REQUEST_FILENAME} !-d
       # И это не директория.
    RewriteCond %{REQUEST_FILENAME} -f
       # Является файлом.
    RewriteCond %{REQUEST_URI} ^(.+)/$
       # И в конце URL есть слеш.
    RewriteRule ^(.+)/$ /$1 [R=301,L]
       # Исключить слеш.
    
    ############################################################################
    #### Добавляем слеш(/), если его нет, и это не файл.                    ####
    ############################################################################
    RewriteCond %{REQUEST_URI} !(.*)/$
       # Если слеша в конце нет.
    RewriteCond %{REQUEST_FILENAME} !-f
       # Не является файлом.
    RewriteCond %{REQUEST_URI} !\..+$
       # В URL нет точки (файл).
    RewriteCond %{REQUEST_URI} ^(.+)$
     # В URL есть хоть один символы
    RewriteRule ^(.*)$ $1/ [L,R=301]
       # Добавляем слеш в конце.
    
    
    ############################################################################
    #### Компрессия статического контента для гугл  спид тест               ####
    ############################################################################
    <IfModule mod_deflate.c>
      AddType image/svg+xml .svg
      AddOutputFilterByType DEFLATE image/svg+xml  
      AddOutputFilterByType DEFLATE application/rss+xml
      AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
      AddOutputFilterByType DEFLATE application/x-font
      AddOutputFilterByType DEFLATE application/x-font-opentype
      AddOutputFilterByType DEFLATE application/x-font-otf
      AddOutputFilterByType DEFLATE application/x-font-truetype
      AddOutputFilterByType DEFLATE application/x-font-ttf
      AddOutputFilterByType DEFLATE application/x-javascript
      AddOutputFilterByType DEFLATE application/xhtml+xml
      AddOutputFilterByType DEFLATE application/xml
      AddOutputFilterByType DEFLATE font/opentype
      AddOutputFilterByType DEFLATE font/otf
      AddOutputFilterByType DEFLATE font/ttf
      AddOutputFilterByType DEFLATE image/svg+xml
      AddOutputFilterByType DEFLATE image/x-icon
      AddOutputFilterByType DEFLATE text/css
      AddOutputFilterByType DEFLATE text/html
      AddOutputFilterByType DEFLATE text/javascript
      AddOutputFilterByType DEFLATE text/plain
      AddOutputFilterByType DEFLATE text/xml
      AddOutputFilterByType DEFLATE image/svg+xml
    </IfModule>
    <IfModule mod_expires.c>
      ExpiresActive on
      ExpiresByType image/jpeg "access plus 3 day"
      ExpiresByType image/svg "access plus 3 day"
      ExpiresByType image/gif "access plus 3 day"
      ExpiresByType image/png "access plus 3 day"
      ExpiresByType text/javascript "access plus 3 day"
      ExpiresByType text/css "access plus 3 day"
      ExpiresByType application/javascript "access plus 3 day"
    </IfModule>
    ############################################################################
    #### Антивирус, только для 1С-Битрикс,                                  ####
    ############################################################################
    #php_value auto_prepend_file "/home/bitrix/ext_www/SITE.RU/bitrix/modules/security/tools/start.php"
       #  если у вас FastCGI, директив не сработает, и нужно ее записать в vhost
       #  укажите путь до файла 
       # включить тут /bitrix/admin/security_antivirus.php?lang=ru
    
    ############################################################################
    #### Конец общей части, далее следует собственные директивы .htaccess   ####
    ############################################################################
    # Рефакторинг сайта 01.01.18
    
    
    
    ############################################################################
    #### Конец собственных директив                             .htaccess   ####
    ############################################################################
    Ответ написан
    Комментировать
  • Правильно ли настроен 301 редирект на сайте?

    shambler81
    @shambler81 Куратор тега htaccess
    ############################################################################
    #### Выбор основного зеркала (с www или без www)                        ####
    ############################################################################
        # 1. Удалить www
    RewriteCond %{ENV:HTTPS} on
        #Если включен https
    RewriteRule .* - [E=SSL:s]
        #То создаем переменную  ssl с текстом s
    RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
        # Проверяем, содержит ли домен www в начале URL.
    RewriteRule ^(.*)$ http%{ENV:SSL}://%1/$1 [R=301,L]
        # Перенаправляем удаляем www
    ############################################################################
    #### Перенаправляем протокол https на http                              ####
    ############################################################################
    RewriteCond %{HTTPS} on
       # Проверяем наличие https в URL.
    RewriteRule ^.*$ http://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
       # Перенаправляем протокол на http.

    Однако учти пару НО
    1. браузеры не любят переходить на http уже побывав на https, хотя код ответа сервера будет правильный браузер все-равно будет упорно показывать https и работать с ним
    По этому проверяй ответ сервера а не сам браузер, браузер сам на уме
    2. https может не сделать редирект еще по двум причинам.
    На сервере нет https к этому сайту, а специфика работы c https подразумивает ВНАЧАЛЕ получить ключи, а только потом посмотреть http referer.
    А следоватлеьно нет ключей - нет referer -> нет сайта -> нет .haccess -> нет редиректа ;)
    ну и самый козырный вариант
    есть один сайт с http а другой http+https в таком варианте есть вероятность отдачи первым сайтом на https контента соседнего сайта . К сожалению такое достаточно часто бывает,и тут опять же проблема получения рефери после полкченя ключей и никак иначе, вплотьдо того что сайт вообще не имеет https, но узнает он о этом только после того как подключается по нему.
    ну и на подлесок, в 2018 году делать редирект на http это даже не смешнь ;(
    Все уже давно перешли на https
    Ответ написан
    Комментировать
  • Почему не работает 301 редирект ModX?

    shambler81
    @shambler81 Куратор тега htaccess
    покажите весь .htaccess
    Ответ написан
    Комментировать
  • Как привести урл к виду?

    shambler81
    @shambler81 Куратор тега htaccess
    ГЕТ НЕ ЯВЛЯЕТСЯ ЧАСТЬЮ УРЛА
    сделай тут
    https://donatstudios.com/RewriteRule_Generator
    А потом в конце экранируй вопрос в урле куда, и будет тебе счастье
    Ответ написан
  • Как сделать редирект с www на https?

    shambler81
    @shambler81 Куратор тега htaccess
    1. в вашем правиле нет ни одной правильной строчки.
    2.
    RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
        # Проверяем, содержит ли домен www в начале URL.
    RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
     # Перенаправляем удаляем www


    Ну и вариант с сохранением протокола
    # 1. Удалить www
    RewriteCond %{ENV:HTTPS} on
        #Если включен https
    RewriteRule .* - [E=SSL:s]
        #То создаем переменную  ssl с текстом s
    RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
        # Проверяем, содержит ли домен www в начале URL.
    RewriteRule ^(.*)$ http%{ENV:SSL}://%1/$1 [R=301,L]
        # Перенаправляем удаляем www


    3. Но у вас проблема не в редиректе, сайт должен был изначально доступен по https и www
    возможные причины
    1. www нет в виртуал хосте для https
    2. нет SSL ключей для https
    3. какую ошибку выдает ?
    Ответ написан
    2 комментария
  • Не могу составить правило с Mod Rewrite?

    shambler81
    @shambler81 Куратор тега htaccess
    get - не является частью урла
    RewriteCond %{QUERY_STRING} (^|&)product\=32955879185($|&)
    RewriteRule ^category/product/index\.php$ /nameshop/category/alias_product? [L,R=301]
    Ответ написан
    Комментировать
  • Почему не работает 301 редирект с параметрами?

    shambler81
    @shambler81 Куратор тега htaccess
    Вообще у вас все правильно написано, если только у вас несколько гет параметров, попробуйте уточнить вот так
    RewriteCond %{QUERY_STRING} (^|&)nomer\=370($|&)
    RewriteRule ^production\.php$ /? [L,R=301]


    Но опять же у вас с виду все норм.
    В какой части .htaccess находится првило случаем не под ЧПУ ?
    Ответ написан
    Комментировать
  • Перенаправление без замены строки (mod_rewrite — RewriteRule) как реализовать?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteCond %{HTTP_HOST} !^www\.domain\.ru [NC]
    # если это ! = не сам домен с ввв
    RewriteCond %{HTTP_HOST} ^(www\.|).+\.domain\.ru [NC]
    # если это ввв или без ввв, плюс это 1 и более символов до основного домена, точки экранируем.
    RewriteCond %{REQUEST_URI} ^(.+)\.(html|htm)$
    # ну я так написал, у тебя тоже пойдет
    RewriteCond %{REQUEST_FILENAME} !-d
    # И это не директория.
    RewriteCond %{REQUEST_FILENAME} !-f
    # не является файлом.
    RewriteCond %{REQUEST_FILENAME} -l
    # и не линка, в общем это не физический объект
    RewriteRule ^(.*)$ / http://domain.ru/\?page\=%2/? [R=301,L]
    # Группа с реврайт гонда это не баксы а проценты, принцип тот -же, теперь подставляем домен в рул, и главное экранируем ? это воообщет спецсимвол. который кстати у нас стоит в конце, он удалит все гет параметры.
    Естественно домен прописываем явно, поскольку нам нужно его сменить а это не часть урла.
    Есл гужно сохранить протокол то правило обрастет еще 3 строками.
    Ответ написан
  • Как настроить htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    Все просто, вам нужно добавить исключения в ЧПУ покажу на примере битрикс, знак НЕ это !
    RewriteCond %{REQUEST_FILENAME} !-f                                               #  если это не файл
      RewriteCond %{REQUEST_FILENAME} !-l                                               #  и если это не линка
      RewriteCond %{REQUEST_FILENAME} !-d                                              #  и если это не директорие ( то есть по сути любые физические файлы и  каталоги)
      RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$             #  и внимание если это этот файл !  в данном случае  чтб небыло цикла. 
      RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]                                           # То перенаправить все запросы туда


    И так вам нужно будет добавить конд с условиями, если это физические файлы и каталоги.
    Если же нет то вам нужно использовать не %{REQUEST_FILENAME} а %{REQUEST_URI} , а вот если в урле будут еще и GET параметры конструкция еще увеличится.
    В общем нужны конечные урлы. ;)
    Ответ написан
    Комментировать
  • Webmaster ответ от страницы то 301, то 200. Проблема с настройкой редиректа?

    shambler81
    @shambler81 Куратор тега htaccess
    Вот ваши коды, все там правильно происходит
    https://bertal.ru/index.php?a5745778/parkotel-soch...

    Теперь по пунктам
    RewriteCond %{SERVER_PORT} !^443$
    RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
    Вот вам одно правило которое заохдящих на http перекидыает на https

    RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
    А вот вам второе правило смотрим на протокол.
    Ну и да .htaccess читается сверху вниз, да и добавок перечитыается несколько раз пока ссылки не устаканятся.
    https://bertal.ru/index.php?a5745822/www.parkotel-...

    А вообще возьмите все страницы старого сайта, соберите их в эксель файле.
    и сделайте потом редиректы каждой страницы на каждую страничку нового ( если это рефакторинг сайта)
    Ответ написан
    3 комментария
  • Как сделать перенаправление на index на localhost?

    shambler81
    @shambler81 Куратор тега htaccess
    1. Не имейте привычку разрабатывать локально, локальная среда все-равно будет оличия от боевого *nix сервера.
    Просто возьмите за правило вести разработку на удаленой машине, дабы phpstorm вам в руки, GIT /ssh и тд и тп.
    2. используйте реальное доменное имя, прописав его в .host файл
    3. логи вам в помощь.
    Ответ написан
  • Как перенаправить папку apache?

    shambler81
    @shambler81 Куратор тега htaccess
    Самый правильный вариант это использовать ln мягкую ссылку.
    И не городить приколов с редиректами.
    Ответ написан
  • Как сделать редирект обращения к файлу?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteCond %{REQUEST_URI} !\.(css|js|jpg|gif|png)$ - маска файлов
    RewriteCond %{REQUEST_FILENAME} -f без маски это просто файл
    RewriteCond %{REQUEST_FILENAME} robots.txt$ -конкретный файл

    Ваше правило
    RewriteCond %{HTTP_HOST} !^www\.site\.com
    RewriteCond %{REQUEST_FILENAME} file.rar$
    RewriteRule ^/(.+\..+)$ /disk/$1? [L,R=301]

    или
    RewriteCond %{HTTP_HOST} !^www\.site\.com
    RewriteCond %{REQUEST_FILENAME} -f   
    RewriteRule ^/(.+\..+)$ /disk/$1? [L,R=301]


    и тому подобное

    Дайте больше вариантов сделюем покрасивее регулярку, только ли в корне файлы, любые ли файлы нужно пенераправлять на диск, а что со вложенными в другие директории и тд.

    PS
    ^/(.+\..+)$ /disk/$1?
    ^ начало строки
    *(....) - то что станет потом первой группой $1
    .+ - то же самое что и .* толко не от 0 символов а от 1
    \экранирование символа ( то есть сам символ а не то что он означает в регулярке.
    ? в конце - удалит гет параметры если они есть.
    Ответ написан
    Комментировать
  • Как через htaccess перенаправить субдомен на одну страницу?

    shambler81
    @shambler81 Куратор тега htaccess
    ну для начала немного теории
    ?- и далее это GET паравметр он не является частью RequestURI а как следствие не виден им вообще, п оэтому редиректы с использованием GET параметров нужно делать по другому, да и в добавок экранируйте спец символы, они на это и есть
    \?
    \/=

    умереть они от этого не умрут точно.
    Третье, вы пытаетесь написать ЧПУ - рекомендую не придумывать велосипед а использовать именно его.
    НУ и давайте разберемся .

    RewriteCond %{HTTP_HOST} ^(www\.|)sub\.(.+) [NC]
    #Если хост www.sub или sub.и далее хотябы один символ, плюс все регистронезависимое
    RewriteRule ^(.*)$ http://sub.php\?action\=weekly\&status\=$1? [L]
    #то выделяем все что там после домена в группу1 и не забывая экранировать спецсимволы подставляем в урл, плюс в конце стоит вопрос, это блядство удалит гет параметры   выставленные до этого ;)


    Если вам нужно использовать GET параметр в этом урле то
    Поймать его можно будет уже через
    RewriteCond %{QUERY_STRING} (^|&)(faq\=13)($|&)
    Собрать его так же в группу ну и подставить ее в рул но уже не $2 а %2
    Ответ написан
    3 комментария
  • Что не так в htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    думаю все хорошо, вот только вы почему-то делаете редиренкты после ЧПУ гыгы ;)
    Ответ написан
  • Как сделать правило для .htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteCond %{QUERY_STRING} (^|&)user=\(.+)($|&)
    RewriteCond %{QUERY_STRING} (^|&)pass=\(.+)\$($|&)
    RewriteRule ^launcher/auth\.php$ /index.php\?mode=launcher&user=%1&pass=%2/? [L,R=301]
    Ответ написан
    Комментировать
  • Почему редактируется файл htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    это у вас батенька пробелы \\x20
    сохраненный через "плохой" редактор ;)
    Естественно оно дает 500
    Ответ написан
  • Как закрыть прямой доступ к файлам в папке через .htaccess, но разрешить если есть ?key=secret?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteCond %{QUERY_STRING} !(^|&)key\=secret($|&)
    RewriteRule ^orders/1\..+$ http://test.ru/404.php [L,R=301]


    Если нет GET параметра key=secret
    То отправить куда-нибудь , например 404.php
    Ответ написан
    Комментировать