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

    shambler81
    @shambler81 Куратор тега htaccess
    вопрос не имеет смысла.
    Правеьлный .htaccss -тот который вы сделали, по сути это дополнительные конфигурации и настройки, редиректы и тд.
    Мало того сайт может работать и вовсе без него
    А некоторые виды представления php вовсе игнорируют этот файл принудительно.
    Так что ответ на первый вопрос, - недостаточно данных, какой движок что нужно и тд.
    2. если у вас есть список сопоставлений что к чему, это да можно менять.
    Но думаю вам нужно присмотреться к ЧПУ
    И решить оба вопроса

    Ответ на второй вопрос
    Почитайте как сделать ЧПУ
    master-it.biz/make-friendly-urls-site-php.html
    Ответ написан
    Комментировать
  • Почему htaccess редирект добавляет 2 раза параметры в адресную строку?

    shambler81
    @shambler81 Куратор тега htaccess
    не вижу у вас тут ни одгого правила которое могло бы затронуть GET параметр.
    Надеюсь вы не этим пытаетесь его выцепить ?%{REQUEST_URI}
    Ответ написан
    1 комментарий
  • Как сделать редирект в htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    Разберите данный набор стандартных правил, большинство вам будут полезны.
    Теперь что касается редиректов с гет и без гет запросов.
    1 удалить гет - в конце поставить ?
    2 Добавить гет в конце урла поставить /\?id\=111 короче не забываем экранировать
    3. Как вырезать часть гет и передать его куда-либо
    Гет не является частью ула и вырезается через RewriteCond квери стриинг
    А вставляется следующим обраом $1 -из конда будет %1
    4. https://www.donatstudios.com/RewriteRule_Generator
    ############################################################################
    #### Стандартный .htaccess для проектов студии Клондайк, версия 3.5     ####
    ############################################################################
    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 %{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.
    
    ############################################################################
    #### Убираем повторяющиеся слеши (/) в 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.
    
    ############################################################################
    #### Компрессия статического контента для гугл  спид тест               ####
    ############################################################################
      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 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"
       #  укажите путь до файла 
       # включить тут /bitrix/admin/security_antivirus.php?lang=ru
    
    ############################################################################
    #### Конец общей части, далее следует собственные директивы .htaccess   ####
    ############################################################################
    Ответ написан
    1 комментарий
  • Wordpress / Apache 2.0. Как убрать GET-параметры?

    shambler81
    @shambler81 Куратор тега htaccess
    site.com/blog/post?
    в редиректе куда - поставить вопрос в конце, он удалит гет параметры
    Если же вам нужно выделить конкретные гет запросы то сам редирект не видит квери стринг
    и для этого требуется выделять его через квери стринг
    Ответ написан
  • Как убрать редирект поддомена на www?

    shambler81
    @shambler81 Куратор тега htaccess
    1. вам нужно для начала убедиться что есть А запись www.a.site.ru
    Иначе редирект не сработает.

    Ну и никто вам не мешает уточнить условие
    RewriteCond %{HTTP_HOST} ^www\.a\mysyte\.ru [NC]
    RewriteRule ^(.*)$ https://mysyte.ru/$1 [R=301,L]
    Ответ написан
  • Как убрать слэш в конце одной страницы при htaccess редиректе?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)/$ /$1 [R=301,L]
    Ответ написан
  • 301 редирект возвращает 303, почему?

    shambler81
    @shambler81 Куратор тега htaccess
    1. давай сам сайт, проверю заголовки.
    2. так же не забвай что нужно смотреть не последний ответ а всю последоватлеьность, воспользуйся сервисом который смотрит не только последний но и всю серию.
    Ответ написан
    1 комментарий
  • Как правильно настроить RewriteRule в htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    Если у вас гет пармметры то их нужно выделять отдельно
    RewriteCond %{QUERY_STRING} (^|&)blog($|&)
    RewriteCond %{QUERY_STRING} (^|&)page\=([0-9]{1,})($|&)
    RewriteRule .............................. [L,R=301]

    Так же подставить значения из скобок реврайт конда можно через %1 %2 и тд.
    Ответ написан
    Комментировать
  • Как правильно настроить htaccess если используется RewriteBase?

    shambler81
    @shambler81 Куратор тега htaccess
    реврайт бэйс не должен мешать
    ну на всякий положи в него свой редирект на ввв в начале файла
    Ответ написан
    Комментировать
  • Почему редирект не работает в блоке?

    shambler81
    @shambler81 Куратор тега htaccess
    DirectoryIndex index.php
    AddDefaultCharset UTF-8

    Options -Indexes
    Options FollowSymLinks

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /content.php?PATH=/$1 [L,QSA]


    php_flag magic_quotes_gpc off
    php_flag register_globals off

    # Добавление слеша в конце пути
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} /+[^\.]+$
    RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
    Ответ написан
    Комментировать
  • Почему редиректит на index.php?

    shambler81
    @shambler81 Куратор тега htaccess
    ЭЭЭ А ВЫ ПРОБОВАЛИ ПЕРЕМЕСТИТЬ БЛОК С WWW ВВЕРХ ?
    все редиректы делайте до ЧПУ
    Ответ написан
    1 комментарий
  • Неверный .htaccess?

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

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteCond %{REQUEST_URI} ^question/.+ [NC]
    RewriteRule . - [R=404,L,NC]

    Если после question есть что-то то редиректить на 404, но можно и на файлик который отдает 404 тогда будет 301+404

    Ну и любое после второго с 1 каталога.
    вот только нужно уточнить сработает ли квантификатор
    В данном случае ?/ - первый слеш вконце

    RewriteCond %{REQUEST_URI} ^.+?/.+ [NC]
    RewriteRule . - [R=404,L,NC]

    Если не сработает то
    RewriteCond %{REQUEST_URI} ^([^\/].+)\/) [NC]
    RewriteRule . - [R=404,L,NC]

    [^\/] - не /

    эти редиректы не затронут урлов с GET запросами, но их не было в тз
    Ответ написан
    Комментировать
  • Как сделать редирект при наличии utm-метки?

    shambler81
    @shambler81 Куратор тега htaccess
    редирект если в урле есть ютм сорс эдвордс
    RewriteCond %{HTTP_HOST} ^www\.test\.com$
    RewriteCond %{QUERY_STRING} (^|&)^utm_source\=adwords($|&)
    RewriteRule ^(.*)$ http://google.site.ru/$1 [R=301,L]

    Если его наоборот нету
    RewriteCond !%{QUERY_STRING} (^|&)^utm_source\=adwords($|&)
    RewriteRule ^(.*)$ http://google.site.ru/$1 [R=301,L]
    Ответ написан
  • Нужна помощь с htacess. Как сделать перенаправление правильно?

    shambler81
    @shambler81 Куратор тега htaccess
    какая-то помойка а не редиректы
    куча ну очень странных условий
    в добавок еще и после ЧПУ
    И того
    Если урл не содержит гет запроса
    и не содержет второго гет запроса притом каким образом он появится если нет 1
    И если нет =
    И если не содержит точек ( то есть все файлы)
    И это не главная , притом со слешем, без слеша не в счет
    То перенаправить все до первого слеша на это

    Напишите что именно вы хотели бы сделать
    Желательно пару урлов что куда должно поехать.
    Я сам напишу регулярку
    Ответ написан
    Комментировать
  • Кеш файла .htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    mod_rewrite не имеет системы кеширования.
    как вариант сделай релоад апача
    и эта ошибка точно есть в ерор лог
    смотри его
    Ответ написан
    Комментировать
  • Что означают данные Apache rewrite-правила?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteRule (.*) https://myfotos.cc/$1 [R=301,L]
    Все урлы добавят все что было в скобках в начале, посколькуо в начале в скобках вся часть урла, то они добавят сверху https://myfotos.cc/тут_все_что_было_до_ этого, но это правило приведет к циклу.

    RewriteRule ^(.*[^\/])$ /$1/ [R=301,L]
    любые вимволы в любом количестве[^\/]- это кроме / , далее все это подставить вместо $1 тобишь добавить слеш вначале и в конце, тоже идиотское правило.
    Redirect 301 /en/ https://myfotos.cc/
    Перенаправить урл /en/ на ллавную https://myfotos.cc/
    RewriteRule ^index\.html$ / [R=301,L]
    index.html на /
    RewriteRule ^/?$ "https\:\/\/myfotos\.cc" [R=301,L]

    Начло строки со / и одного любого символа - на каой-то бред это не будет работать.
    Он пытается перенаправить пеочему-то в ковычках хотя их в мод реврайте на htts: у которого так же экранированы двоеточия, которое нахре н не нужно, экранировано два слеша которые тоже нафиг не нужно ну и домен опять со слешем и опять ковычки, короче хотели сделать редирект на главную страничку c https
    Redirect 301 /en/ https://myfotos.cc/
    А это проавило уже повторяется
    Ответ написан
    Комментировать
  • Как сконфигурировать обработчик POST и GET запросов wordpress для меток gclid google adwords?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteEngine On
    RewriteBase /
    RewriteCond %{QUERY_STRING} (^|&)gclid\=.+($|&)
    RewriteRule (.*) /$1? [R=301,L,QSD]

    Онако пологаю вам нужно исключить из ЧПУ
    самого вордпресса следующие страницы а следовательно в чпу встроить отрицание гет запроса
    RewriteCond %{QUERY_STRING} !(^|&)gclid\=.+($|&)
    Ответ написан
    Комментировать
  • Как сделать массовый редирект (правило) в htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    Перенаправляет все содержимое каталогов http://site.ru/dir1/любое/любое → в site.ru dir2 /любое/любое .
    RewriteCond %{REQUEST_URI} ^/dir1/(.*)$ 
    # если строка начинается с /dir1/ 
    RewriteRule ^(.*)$ /dir1%1 [R=301,L]

    #Перенаправить все урлы с начинающиеся с dir1 на dir2 с сохранением дальнейшей структуры URL
    Перенаправляет все содержимое каталогов/любое/dir1/любое/любое → в /любое/dir2/любое/любое
    RewriteCond %{REQUEST_URI} ^(.*)/dir1/(.*)$ 
    # если строка содержит /dir1/ 
    RewriteRule ^(.*)$ %1/dir2/%2 [R=301,L]
    Ответ написан