Задать вопрос
Ответы пользователя по тегу htaccess
  • Как настроить правильный редирект c www?

    shambler81
    @shambler81 Куратор тега 1С-Битрикс
    это неправельно настроеный nginx к сожалению это достаточно чатое явление.
    Пропишите явно домен куда делать редирект, и все.
    Ответ написан
    Комментировать
  • Правильный 301 редирект ссылок wordpress после смены ЧПУ?

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

    shambler81
    @shambler81 Куратор тега 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 комментария