Ответы пользователя по тегу htaccess
  • Не получается сделать редирект с http:// на https://, через htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    1. поставь редирект перед ЧПУ
    2. не все сервера понимают именно такую конструкцию, хотя все верно, в интернете есть куча вариантов написания, просто перебери.
    Как настроить редирект на https в.htaccess?
    и не забудь что у тебя есть езе зеркало с ввв
    ему тоже нужно сделать редирект, или включить его в регулярку.
    Ответ написан
    Комментировать
  • Как убрать get параметр ymclid через .htaccess, добавляемый Яндекс Маркетом?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteCond %{QUERY_STRING} (^|&)show-uid=160964544213342035117011($|&)
    RewriteCond %{QUERY_STRING} (^|&)nid=57280($|&)
    RewriteCond %{QUERY_STRING} (^|&)fesh=440498($|&)
    RewriteCond %{QUERY_STRING} (^|&)context=search($|&)
    RewriteRule ^product/1840001118$ /product/1840001118? [L,R=301]

    Тут я тебе показал как можно выедлить каждый гет по отдельности, плюс как удалить их вовсе. ( в направление куда обрати внимание на вопрос в конце, именно он удаляет все гет параметры)

    Ни если тебе нужно удалить какой-то один то все что тебе нужно собери регулярку
    Переменные из конд это не $1$2 и тд а %1%2 и так далее
    В твоем случае нужно сделать редирект только одного параметра вот только с ним и работай, остальную часть урла оставляй без изменений.
    Да и в с строке куда, не забудь поставить экран перед вопросом, ведь это спецсимвол как-никак.
    Кстати равно в гет помоему тоже экранируются.
    Ответ написан
    6 комментариев
  • Как правильно реализовать массовый редирект 301 с параметрами фильтра?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteCond %{REQUEST_URI} ^(.*)/s-obratnaya_svyaz-est/(.*)$ 
    RewriteRule ^(.*)$ %1/obratnaya_svyaz/%2 [R=301,L]
    Ответ написан
    3 комментария
  • Как правильно настроить .htaccess при переносе сайта в подкатегорию?

    shambler81
    @shambler81 Куратор тега htaccess
    open_basedir: /home/account/site.com этож нахреа козе баян?
    Если не понимаешь в чем проблемам, сделай "символическую ссылку", пусть будет папка доступна по обоим адресам. тебе жалко чтоли?
    Зато не нужно будет разбираться что происходит.
    А еще лучше исправь doceumentroot в виртуалхосте веб сервера.
    Ответ написан
  • Редирект htaccess не работает?

    shambler81
    @shambler81 Куратор тега htaccess
    Во первых у тебя цикл, поскольку нет проверки на текущий протокол урла
    Во вторых редиректы со странисчками сайта естественно до чпу желательно отлаживать а не после него.
    Ну и главное Браузер как только видит https ни вжизнь не захочет перейти на http и если в заголовках будет http то сам браузер всеравно будет упорно лезть на https. Клал он болт на твои исключения.
    Ответ написан
  • Есть ли возможность указать в .htaccess директиву ErrorDocument для всех ошибок?

    shambler81
    @shambler81 Куратор тега htaccess
    ErrorDocument 400 /error/400.html
                            ErrorDocument 401 /error/401.html
                            ErrorDocument 403 /error/403.html
                            ErrorDocument 404 /error/404.html
                            ErrorDocument 405 /error/405.html
                            ErrorDocument 500 /error/500.html
                            ErrorDocument 502 /error/502.html
                            ErrorDocument 503 /error/503.html

    И да код передать можно но зачем, их не так много и текст к ним нужно писать отдельно.
    Ответ написан
    Комментировать
  • Реврайт без редиректа на wordpress?

    shambler81
    @shambler81 Куратор тега htaccess
    1. ln younglinux.info/bash/link.php дешево и сердито.
    2.nginx + apache и опять же дешево и более сердито.
    3. У апача тоже есть мод прокси, но его нужно доставлять.
    4. Переписать index.php ( зависит от движка и че там намутили)
    5. Возможно подойдет редирект со статусом 200
    6. documentroot изменяем вvirtualhost ( правильный способ)
    Ответ написан
    Комментировать
  • Почему пропадает файл .htaccess в сайте на joomla?

    shambler81
    @shambler81 Куратор тега htaccess
    гыгы Включи его в админке
    Ответ написан
    Комментировать
  • Как настроить ЧПУ через .htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    Гет не является частью урла и по этому он и не выделяется
    RewriteCond %{QUERY_STRING} (^|&)id\=1($|&)
    RewriteRule ^search$ /search/1? [L,R=301]

    RewriteCond %{QUERY_STRING} - ловим сам гет по краям группы это знак & поскольку гет может быть в любом месте ( в вашем случае вообще можно убрать)
    В конце реврайт рула стоит знак ? он удалит гет парметры.

    Теперь отсалось приветси это в жизнеспособный вид
    мы заменяем цифру 1 на регулярку и вставляем е ев реврайт рул, а поскольку рул сам может групировать то вместо $ используются %
    RewriteCond %{QUERY_STRING} (^|&)id\=(.+)($|&)
    RewriteRule ^search$ /search/%2? [L,R=301]
    Ответ написан
    Комментировать
  • Как сделать дополнительное ЧПУ по Get параметрам?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteCond %{QUERY_STRING} (^|&)newstype\=(+*)($|&)
    RewriteRule ^baza\-znanij$ /baza-znanij/%2? [L,R=301]


    Ваще изи
    для этого нам поднадобится
    1. GET не является частью урла так что его можно выцепить только отдельно RewriteCond %{QUERY_STRING}
    2. гет парметр может начинаться так и заканчиваться с & так и с & (^|&)тут гет($|&)
    3. экранируем \=
    4. групиируем нужный вам гет в скобки ( они тут уже по счету будут вторые) (+*)
    5. Вставляем его в реврайт рул, но поскольу $ уже заняты самим рулом то группы из cond будут не $ а %, вставляем вторую группу, она же скобки. %2
    6. удаляем гет парметры, ставим в конце ?
    Ответ написан
    Комментировать
  • Настройка исключения редиректа?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !^/myfile.php
    RewriteRule .* index.php [L]


    Знак отрицания работает во всех условиях
    !
    Ответ написан
    Комментировать
  • Как сделать правильный htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteRule (.*)\.json$ $1\?json [R=301,L]
    Ответ написан
  • Как убрать повторяющиеся слэши (они же %2F) в конце url?

    shambler81
    @shambler81 Куратор тега htaccess
    Все до тупости просто это не урл
    GET - не является частью урла
    Соответственно вы и не можите сделать простой редирект.

    Так бы оно выглядело ровно по тз
    http://www.domain.ru/works/4/?photos=3409
    RewriteCond %{QUERY_STRING} (^|&)photos\=3409%2F%2F%2F%2F%2F%2F%2F%2F%2F%25($|&)
    RewriteRule ^works/4/$ /works/4/\?photos=3409 [L,R=301]

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

    RewriteCond %{QUERY_STRING} (^|&)photos\=([0-9]{1,}).*($|&)
    RewriteRule ^works/4/$ /works/4/\?photos=%2 [L,R=301]
    И так по порядку
    (^|&)...($|&) - просто гет запрос он может бытьне первым а вторым следовательно можен или начинаться или заканчиваться с? или & так что можно обойтись и без этого.
    photos\= Равно экранируем
    [0-9]{1,} - от нуля до 9, повторить один раз и более
    (..) скобки групируют если группы из RewriteRule - ' это $1$2 и тд по номеру группы
    То они же из cond будут %1%2 соответственно ты видешь что photos=%2 - это то что будет в конде во второй скобке.
    Ответ написан
    6 комментариев
  • Как сделать редирект в htaccess с динамического поддомена с www на поддомен без www?

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

    shambler81
    @shambler81 Куратор тега htaccess
    Ответ написан
    Комментировать
  • Как добавить Редиректы modRewrite в htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    в 404.php делай все че хочешь, htaccess для этого совсем необязателен.
    А уж в пыхе инклудь хоть заинклудься, да и редиректы там проще сделать, меньше гемороя с гет запросами и тд и тп.
    Ответ написан
  • Как настроить редирект на https для robots.txt?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteCond %{HTTP:X-HTTPS} !1
    RewriteCond %{REQUEST_URI} !robots.txt
    RewriteRule ^(.*)$ https://SiteName.ru/$1 [R=301,L]

    Кэп ну при полном уважение, первая же ссылка в гугле

    В твоем случае
    RewriteCond %{HTTPS} off
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteCond %{REQUEST_URI} !robots.txt
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    Ответ написан
    5 комментариев
  • Как правильно составить условие для rewritecond?

    shambler81
    @shambler81 Куратор тега htaccess
    Вообще правильно наоборот добавлять слеш, однако надо не забывать что есть места исключения когда его нужно убирать.
    В общем кидаю тебе правило уже расписаное
    ! - отрицание остальное там прокоментированно.
    Уж из этого сможешь переработать под себя
    ############################################################################
    #### Убираем повторяющиеся слеши (/) в 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 нет точки (файл).
    RewriteRule ^(.*)$ $1/ [L,R=301]
       # Добавляем слеш в конце.
    
    ############################################################################
    #### Убираем index.php, если он есть в конце URL                        ####
    ############################################################################
    RewriteCond %{REQUEST_METHOD} =GET
       # Выявляем GET запрос в URL (не POST).
    RewriteCond %{REQUEST_URI} ^(.*)/index\.php$
       # URL cодержит index.php в конце.
    RewriteRule ^(.*)$ %1/ [R=301,L]
       # Удалить index.php из URL.
    Ответ написан
    7 комментариев
  • Два файла htaccess как настроить редирект?

    shambler81
    @shambler81 Куратор тега htaccess
    В любом из них, мало того в люлой папке
    .htaccess ммогут лежать в любой папке и каждый из них будет частным случаем от предидущего
    Так что если вам нужно указать на весь сайт то в корне сайта, если настройки только для одной директории то можно создать этот файл там и задать нужные настройки в нем.

    Теперь по настройке https
    если вы хотели настроить https - то это не к .htaccess а к vitrualhost и где и какие они у вас зависит от хостинга.
    Если же вы хотели сделать редиректы http > https то не вопрос это легко сделать.
    Да и эти редиректы до ЧПУ вашего сайта!
    Правила нестандартные поскольку вначале делается редирект с основного зеркала, притом сохраняя протокол, а потом только меняется протокол, однако такой вариант может учесть любой требуемый вам вариант редиректа, просто раскоментировав нужный кусок.
    Стандартные правила можете лекго найти в интернете.

    ############################################################################
    #### Выбор основного зеркала (с 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 %{ENV:HTTPS} on
       # Проверяем наличие https в URL.
    #RewriteRule ^.*$ http://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
       # Перенаправляем протокол на http.
    
    ############################################################################
    #### Перенаправляем протокол http на https                              ####
    ############################################################################
    RewriteCond %{ENV:HTTPS} !on
       # Проверяем наличие https в URL.
    RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
       # Перенаправляем протокол на http.
    Ответ написан
    3 комментария
  • Как не перенаправлять только запросы с index.php?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php?$1 [QSA,L]

    Таки все должно работать ведь
    RewriteCond %{REQUEST_FILENAME} !-f
    Это правило говорит что запрос НЕ ФАЙЛ!
    ТАк же можно более жестко прописать

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !.+\.php$
    RewriteRule ^(.*)$ /index.php?$1 [QSA,L]
    Ответ написан
    Комментировать