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

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteRule ^lot/([0-9]{1,})$ /\?lot=$1 [NC,L]
    так же не забывайте что GET не является часть RewriteRule и к примеру тот же ? физичек не может бы делен в нем

    если у вас прям вот такой урл с вопросом в конце то
    RewriteCond %{QUERY_STRING} (?:^|&)\$(?:$|&)
    RewriteRule ^lot/([0-9]{1,}))/$ /\?lot=$1 [L,R=301]
    Ответ написан
    Комментировать
  • Что не так с этим htacess?

    shambler81
    @shambler81 Куратор тега htaccess
    ну тут проще сказать что тут так

    1. я писал стандартный .htacces и в нем было все продумано, вы вырезали с него куски,натыкали в разные места и спрашиваете что тут пошло не так.
    К примеру у вас только один кусок отвечающий за убирание слеша, а добавлять слеш на каталоги ваше светейшество решило не делать ибо не судьба ?
    2. htaccess читается сверху в низ и последовательность важна
    3.
    верхнего в нижний регистр итд
    вы так же перемешали правила.
    ну тут чтоб без матюгов я отвечу коротко Линукс регистрозависимая система ( это реально если матюгов и пены) какой "умный" человек вообще придумал делать такие редиректы заслуживает отдельного места в аду.
    4.(Chrome/76.0.3809.10) - только данная версия остальные нет ?
    5.
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    это я так понимаю вы пытались удалить слешы у симлинков и файлов?

    6.#RewriteCond %{REQUEST_URI} !^/$
    ээ вас не смущает что таких ссылок в природе не бывает
    домен закрывается слешем до реврайт рул, то есть это должно быть site.ru//index.php

    в общем у вас правильно только часть ЧПУ движка и то странно разделена поо середине
    напишите что у вас за движок и что вы хотели получить этими редиректами я вам напишу как это должно выглядеть
    Ответ написан
  • Как сделать редирект если в конце цифры?

    shambler81
    @shambler81 Куратор тега htaccess
    Чисто по тз
    RewriteRule ^kak\-ukrasit\-interer\-rakushkami/32\-3/$ /kak\-ukrasit\-interer\-rakushkami/? [L,R=301]

    А вот если у вас всего две цифры тире 1 цифра
    https://regex101.com/r/5I0rz0/1

    А вот если синтаксис такой любое количество цифр тире любое количество цфр
    https://regex101.com/r/5I0rz0/2

    А вот скорее всего что тебе нужно
    https://regex101.com/r/5I0rz0/4
    [^\/]+ - любое количество символов но не слеш
    [0-9]{1,} - цифры от нуля до девяти от одного раза и больше

    (\/|) - слеш или его отсутствие в конце ( не обязательно)
    Ответ написан
    4 комментария
  • Как в .htaccess сделать подмену файла robots.txt на robots.php?

    shambler81
    @shambler81 Куратор тега htaccess
    ЭЭ простите ну не указывайте 301 в чем проблема то ?
    RewriteEngine On
    RewriteBase /
    RewriteRule ^robots.txt$ /robots.php [L]
    Ответ написан
    6 комментариев
  • Как добавить слеш в конце url?

    shambler81
    @shambler81 Куратор тега htaccess
    Тупо добавлять слеш нельзя поскольку с семантической точки это неправильно
    это нужно добавить если это каталог, или виртуальный каталог, и наоборот убрать если это файл
    к примеру /index.html/ - это смотрится тупо и сематнически неверно.
    Так что нужно и добавлять и удалять.
    так же я подправил требования под гугл пейдж спид.
    вот держи
    RewriteEngine on 
    #  Директива включает редиректы.
    ErrorDocument 404 /404.html
    # 404 ведет на 404.html
    
    ############################################################################
    #### Выбор основного зеркала (с 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
    
    ############################################################################
    #### Перенаправляем протокол http на https                              ####
    ############################################################################
    RewriteCond %{HTTPS} off
       # Проверяем наличие https в URL.
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
       # Перенаправляем протокол на http.
    
    ############################################################################
    #### Убираем index.php, если он есть в конце URL                        ####
    ############################################################################
    RewriteCond %{REQUEST_URI} ^(.*)/index\.php$
       # URL cодержит index.php в конце.
    RewriteCond %{REQUEST_METHOD} =GET
       # Выявляем GET запрос в URL (не POST).
    RewriteRule ^(.*)$ %1/ [R=301,L]
       # Удалить index.php из URL.
    
    ############################################################################
    #### Убираем повторяющиеся слеши (/) в URL                              ####
    ############################################################################
    RewriteCond %{THE_REQUEST} //
       # Проверяем, повторяется ли слеш (//) более двух раз.
    RewriteCond %{QUERY_STRING} !http(s|)://
      # Убедимся что это не урл в  GET
    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]
       # Добавляем слеш в конце.
    
    
    ############################################################################
    #### если это заглавные буквы от трех до девяти например ВАСЯ.html      ####
    ############################################################################
    
    RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP
    # если это английские заглавные буквы от 3 до 9
    RewriteRule ^([^.]+)\.html$ https://auto-cartel.ru/$1 [R=301,L]
    # то  удалить html останется просто /ВАСЯ, на другие случаи не распространяется.
    
    ############################################################################
    #### ЧПУ ДВИЖКА стоит всегда в самом низу правил                        ####
    ############################################################################
    RewriteCond %{REQUEST_URI} !(\.[^./]+)$
    RewriteCond %{REQUEST_fileNAME} !-d
    RewriteCond %{REQUEST_fileNAME} !-f
    RewriteRule (.*) /$1.html
    
    ############################################################################
    #### Компрессия статического контента для гугл  спид тест               ####
    ############################################################################
    <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 1 year"
      ExpiresByType image/svg "access plus 1 year"
      ExpiresByType image/gif "access plus 1 year"
      ExpiresByType image/png "access plus 1 year"
      ExpiresByType text/javascript "access plus 1 year"
      ExpiresByType text/css "access plus 1 year"
      ExpiresByType application/javascript "access plus 1 year"
      ExpiresByType application/vnd.ms-fontobject "access plus 1 year"
      ExpiresByType application/x-font-ttf "access plus 1 year"
      ExpiresByType application/x-font-opentype "access plus 1 year"
      ExpiresByType application/x-font-woff "access plus 1 year"
      ExpiresByType image/svg+xml "access plus 1 year"
    </IfModule>
      <IfModule mod_headers.c>
      <filesmatch "\.(ico|flv|jpg|jpeg|webp|png|gif|css|swf|woff|pdf)$">
        Header set Cache-Control "max-age=31536000, public"
      </filesmatch>
      <filesmatch "\.(html|htm)$">
        Header set Cache-Control "max-age=7200, private, must-revalidate"
      </filesmatch>
      <filesmatch "\.(pdf)$">
        Header set Cache-Control "max-age=86400, public"
      </filesmatch>
      <filesmatch "\.(js|otf|ttf|woff|woff2)$">
        Header set Cache-Control "max-age=31536000, private"
      </filesmatch>
      </IfModule>
    ############################################################################
    #### Конец общей части, далее следует собственные директивы .htaccess   ####
    ############################################################################
    Ответ написан
  • Может ли быть приставка www у поддомена и как с неё делать редирект на без www?

    shambler81
    @shambler81 Куратор тега htaccess
    www.site.ru - это просто домен 3 уровня не болше не меньше, это вообще другой домен, правда выданый вашим доменом, он такой же как и
    ya.site.ru www в свое время было создано для того чтоб вы понимали что это ворлд вайд веб то етсь эта ссылка это открыть в браузере ( интернет знаете ли существовал до браузера)
    теперь это и так ясно, по этому ввв не нужно
    так тчо по факту вещь устаревшая как мамонт, но все-равно когда вы создаете домен
    как правило сразу создаете поддомен 3 уровня для сайта и редиректите его на основной сйт.
    Так вот если у вас не создан поддомен то редирект вам не поможет
    поскольку DNS_PROBE_FINISHED_NXDOMAIN

    В общем
    1. зайдите в редактор ДНС зоны
    2. создайте или делигируйте на нужный вам айпи его ( тот же что и у основного домена)
    3. Убедитесь что у в веб панели на хостинге добавлен алиас домену ввв.
    4. дождитесь когда домен откроется по айпи, и будет вам счастье
    не забывайте что это обычный домен и его можно делигировать куда угодно и как угодно, можно на нем разменстить отдельный сайт( но этого просто не делают)
    Ответ написан
    Комментировать
  • Как настроить редирект для страниц сортировок в каталоге?

    shambler81
    @shambler81 Куратор тега htaccess
    1. Гет не является частью урла по этому вывделяется по другому
    2. как это сделать https://donatstudios.com/RewriteRule_Generator
    3. ОБрати внимание он всегда генерит все урлы в конце со знаком ? - он удалит все гет параметры, в пративном случае они останутся.
    4. что касается любого места тут чтоб не запутаться, включая ? и & так что это не имеет значения.
    5. Если тебе нужно часть гет вставить в урл

    Теперь тебе нужно будет объеденить в группы то что в верху по этому ты вместо нужного тебе гет параметра пишешь что-то вроде (.+)
    и вставляешь ее где тебе нужно но уже не $1 а %1 поскольку они идут из реврайт конда.
    Да квантификатор ?:удаляет эту группу из выбора по этому у тебя будет первая
    Но это если тебе нужно будет взять часть гет параметра и вставить ее в урл
    Ответ написан
  • Как настроить редирект .htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    Вот та часть которая из вашего тз понятна
    RewriteCond %{QUERY_STRING} (?:^|&)id\=(.+)(?:$|&)
    RewriteRule ^cat/название/dir/1\.php$ /cat/название? [L,R=301]

    Теперь по передаче GET распшиите что вы имели в виду, как по вашему можно передать GET но не GET ?
    за вот такие художества должен отвечать ваш движок а не новый редирект.
    Какая у вас CMS
    покажите весь htaccess
    и более детально распишите тз
    Ответ написан
    Комментировать
  • Как сделать изменение урл с подкатегории на категорию?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteRule ^category/category/(.*)/$ /category/$1/? [L,R=301]

    давайте весь htaccess и что конкретно не работает
    Ответ написан
  • Как задать значения в .htaccess для конкретных страниц?

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

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteRule ^catalog/gbi/plity/(.*)$ /catalog/plity/$1/? [L,R=301]
    Ответ написан
  • Как исправить ошибку при редиректе?

    shambler81
    @shambler81 Куратор тега htaccess
    я уже ответил в прошлом посте читай там
    А вот тут я тебе дал пару коментов
    # Включаем редиректы
    RewriteEngine On
    # по умолчанию путь будет начинаться с этой папки А не от корня физического дерева например /var/www/site.ru/web/upload
    RewriteBase /
    #  эмм ну мы тут удаляем индекс пхп, я бы еще добавил метод пост но  с вп не работал
    RewriteRule ^index\.php$ - [L]
    
    #видать от движка, но что-то кривое, по факту передаем в гет параметр все что перед files и admin
    RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]
    RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
    
    # если это файл 
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    #  или директория OR меняет и на или
    RewriteCond %{REQUEST_FILENAME} -d
    #то  -
    RewriteRule ^ - [L]
    
    #не уверен что это не костыли поправьте меня кто с вп работал
    RewriteRule  ^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) $1 [L]
    RewriteRule  ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]
    
    #  тоже странное правило
    RewriteRule . index.php [L]
    # читай в прошлом посте
    RewriteRule ^blog/[0-9]{4}/[0-9]{2}/[0-9]{2}/(.*)$ /blog/article/$1/? [L,R=301]
    Ответ написан
    Комментировать
  • Как изменить URL в адресной строке?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteRule ^blog/[0-9]{4}/[0-9]{2}/[0-9]{2}/(.*)$ /blog/article/$1/? [L,R=301]

    [0-9]{4}- от нуля до 9, 4 раза подряд то есть эквивалент XXXX цифр
    (.*) любое значение собрали в группу 1
    $1 - выводим значение 1 группы
    /? - удаляем гет парметры. - опционально можно не делать
    не забудь включить реврайт энджин он
    Ответ написан
  • Как исключить через .htaccess одну директорию из условия {REQUEST_FILENAME} !-d?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteCond %{REQUEST_URI} ^(|/)catalog/
    Ответ написан
    Комментировать
  • Как запретить исполнение файлов в .htaccess в папке на сервере?

    shambler81
    @shambler81 Куратор тега htaccess
    <IfModule mod_mime.c>
            <Files ~ \.(php|php3|php4|php5|php6|phtml|pl|asp|aspx|cgi|dll|exe|shtm|shtml|fcg|fcgi|fpl|asmx|pht|py|psp|rb|var)>
                    SetHandler text/plain
                    ForceType text/plain
            </Files>
    </IfModule>
    <IfModule mod_php5.c>
            php_flag engine off
    </IfModule>
    Ответ написан
    Комментировать
  • Как задать редирект через httacess в случае динамической ссылки?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteRule ^wp/category/\(.*)/$ /$1/? [L,R=301]
    Ответ написан
    Комментировать
  • Как запретить обращение(скачивание архива) по url?

    shambler81
    @shambler81 Куратор тега htaccess
    полодите архив под .htpass и скачивате его с урлом указав пароль, в таком случае физически файл не возможно будет скачать только со ссылкой логина и пароля.
    это самое простое решение.
    Второе решение это скачивание файла через php генерацию урла.
    Ответ написан
    Комментировать
  • Как правильно прописать 301 динамический редирект на Apache?

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


    где (?:^|&) - это или? или & а ?:исключает эту группу то есть она не становится $1
    (.+) - первая група 1 символ и более
    %1 - эквивалент $1 но уже из RewriteCond
    /?- удалить гет параметры

    Если page тоже переменная то укажи это в ТЗ
    Кнопочка отметить решенным находится чуть ниже поста
    Ответ написан
    Комментировать
  • В чем ошибка в моем htacess?

    shambler81
    @shambler81 Куратор тега htaccess
    GET - то что после знака ? не является частью урла
    как следствие ты его просто не можешь выделить
    это делается через реврайт конд
    А вот тут это будет сделать удобно
    https://donatstudios.com/RewriteRule_Generator
    , спасибо кэп, вот я поставил галочку "вопрос решен"
    Ответ написан
    7 комментариев
  • Как в файле htacces в RewriteCond прописать условие редиректа нескольких / (слешей) на 1?

    shambler81
    @shambler81 Куратор тега htaccess
    https://klondike-studio.ru/standards/standartnyy-h...
    Подробно писал тут.
    Если прям по задаче то
    RewriteCond %{THE_REQUEST} //
       # Проверяем, повторяется ли слеш (//) более двух раз.
    RewriteCond %{QUERY_STRING} !http(s|)://
      # Убедимся что это не урл в  GET
    RewriteRule .* /$0 [R=301,L]
       # Исключаем все лишние слеши.
    Ответ написан
    1 комментарий