Ответы пользователя по тегу 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]
    Ответ написан
    Комментировать
  • Как настроить редирект с WWW для сайта кучей поддоменов (по городам)?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteCond %{HTTP_HOST} !^www\..+$ [NC]
    #Если уже не содержит www
    RewriteCond %{HTTP_HOST} ^(.+\.siteName\.ru)$ [NC]
    # если  домен содержит sitemame.ru и есть домен 3 уровня
    RewriteRule ^(.*)$ %1$1 [R=301,L] 
    # То редирект   на скобку с Rweitecond плюс скобку RewriteRule
    Ответ написан
    Комментировать
  • Как запретить доступ по реальному URL с помощью 301 на его алиас mod_rewrite?

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

    shambler81
    @shambler81 Куратор тега htaccess
    отнють не всегда его можно добавлять, а иногда нужно наоборот
    ############################################################################
    #### Убираем слеши в конце 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]
       # Добавляем слеш в конце.

    Часто используемые правила я более подробно описывал тут.
    https://klondike-studio.ru/standards/standartnyy-h...
    Ответ написан
    4 комментария
  • Как сделать redirect со слешем и перенаправлением запросов на index.php?

    shambler81
    @shambler81 Куратор тега htaccess
    все описал тут, копируй вставляй
    И не забывай что отнють не всегда нужно вести на / иногда приходится даже убирать его.
    https://klondike-studio.ru/standards/standartnyy-h...
    Ответ написан
    6 комментариев
  • Как разобраться с редиректом в htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    Все это лядство всегда выше ЧПУ! ЧПУ это то что инициализирует движок ( если совсем в кратце) в твоем случае это посел RewriteBase /
    Сюда вставляешь вот это
    RewriteCond %{REQUEST_FILENAME} !-d
    # если это не директория
    RewriteCond %{REQUEST_FILENAME} !-f
    # и если это не файл
    RewriteCond %{REQUEST_URI} (.+)\.html$
    # И если в урле есть
    RewriteRule ^(.*)$ http://site.ru/%1 [R=301,L]
    #то выполняется условие в котором $ мы вообще не испльзуем а используем % то же самое толоко из RewriteCond ( то что в скобочках предидущего правила. И так Правило говорит что пофиггу какой урл мы берем что было в скобках в предидущем правиле и все.
    
    
    
    
    RewriteRule . /index.php [L]
    Ответ написан
    Комментировать
  • Как создать такой .htaccess?

    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.
    Ответ написан
  • Как сделать редиект xxx/yyy ->xxx/category/yyy?

    shambler81
    @shambler81 Куратор тега htaccess
    четко по тз
    RewriteCond %{REQUEST_URI} ^(xxx)/(yyy)(.*)$ 
    RewriteRule ^(.*)$  http://site.ru/%1/category/%2%3 [R=301,L]
    Ответ написан
    Комментировать
  • Почему .htaccess не работает?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteRule ^blog/articles/([a-z0-9\-/]+) http://site.ru/blog/article.php\?id=$1 [L]
    Ответ написан
    Комментировать
  • Как запретить url с цифрами?

    shambler81
    @shambler81 Куратор тега htaccess
    /ru/tsepy/.*[0-9]{1,}.*
    Ответ написан
    Комментировать
  • Как отредактировать htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteCond %{QUERY_STRING} (^|&)id\=1($|&)
    RewriteCond %{QUERY_STRING} (^|&)page\=2($|&)
    RewriteRule .* odemix.ru/note1\?page2? [L,R=301]
    Ответ написан
    Комментировать
  • Как настроить 301 редирект через htaccess без затрагивания дочерних ссылок?

    shambler81
    @shambler81 Куратор тега htaccess
    ^ - начало строки
    $ - конец строки
    ^/tovari/category1$
    Ответ написан
    Комментировать
  • Какой есть спецсимвол (оператор) для придания точного соответствия?

    shambler81
    @shambler81 Куратор тега htaccess
    1. ответ на ваш ^ - начало/ $ - конец строки
    2. вот вам в помощь www.exlab.net/files/tools/sheets/mod_rewrite/mod_r...
    Тут конечно не все но большая часть.
    3.сделайте так.
    RewriteCond %{QUERY_STRING} (^|&)kupalniki($|&) [OR]
    RewriteCond %{QUERY_STRING} (^|&)plyazhnaya-odezhda($|&) [OR]
    RewriteCond %{QUERY_STRING} (^|&)beachwear($|&)
    RewriteRule ^index\.php$ /beachwear-new/? [L,R=301]

    Или вообще сделайте по нормальному

    RewriteCond %{QUERY_STRING} (^|&)kupalniki($|&) 
    RewriteRule ^index\.php$ /beachwear-new/? [L,R=301]
    
    RewriteCond %{QUERY_STRING} (^|&)plyazhnaya-odezhda($|&) 
    RewriteRule ^index\.php$ /beachwear-new/? [L,R=301]
    ...

    Так же я добавил условие и или, то есть если этот будет идти не первым и начинаться с &
    Если у вас много редиректов а вы плаваете
    то воспользуйтесь вот этим отличным сервисом, он на 99% работает корректно
    https://www.donatstudios.com/RewriteRule_Generator
    Ответ написан
  • Как сделать редирект .htaccess с www & http одновременно?

    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
    
        # 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.
    Ответ написан
    Комментировать
  • Как правильно настроить перенаправление запроса в .htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    думаю это очевидно
    я так понимаю вы напилили там свое чпу
    А следоватлеьно и законы те же самые
    RewriteCond %{REQUEST_FILENAME} !-f
    если вам нужно исключиьть все директории
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ public/$1 [L]

    ну или более детально указать директорию с отрицанием "!"
    RewriteCond %{REQUEST_URI} !^/images/.*
    RewriteRule ^(.*)$ public/$1 [L]

    ну или по маске к статическому контенту в этой папке, тут уже ваше желание
    !^/images/+*\.(Jpg|jpeg|png|PNG)
    и так далее...

    RewriteCond - по сути это ЕСЛИ
    их может быть сколько угодно, после них идет рул это ТО
    Ответ написан
  • Две точки входа?

    shambler81
    @shambler81 Куратор тега htaccess
    Без всяких OR
    Просто доблавляйте вот так вокруг стринга
    (^|&)тут сам гет($|&)
    И не забывайте экранировать \=
    А исключить файл можно достаточно просто, когда одно из условий не сработает.
    В текущем случае это не файл (имя файла)
    RewriteCond %{QUERY_STRING} (^|&) (\<|%3C).*script.*(\>|%3E)($|&)
    RewriteCond %{QUERY_STRING} (^|&)GLOBALS(\=|\[|\%[0-9A-Z]{0,2})($|&)
    RewriteCond %{QUERY_STRING} (^|&)_REQUEST(\=|\[|\%[0-9A-Z]{0,2})($|&)
    RewriteCond %{REQUEST_URI} !^/api.php
    RewriteRule ^(.*)$ index.php [F,L]
    Ответ написан
    Комментировать