Ответы пользователя по тегу Обработка URL
  • Проблема с красивым URL, как исправить?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteCond %{QUERY_STRING} (^|&)action\=cabinet($|&)
    RewriteCond %{QUERY_STRING} (^|&)userId\=4($|&)
    RewriteRule ^index\.php$ /userId/4? [L,R=301]
    Ответ написан
  • Редирект c www на http не срабатывает?

    shambler81
    @shambler81 Куратор тега htaccess
    и протокол
    и не экранировали спец символы
    RewriteCond %{HTTP_HOST} !^www\.site\.com$ [NC]
    RewriteRule ^(.*)$ https://site.com/$1 [R=301,L]
    Ответ написан
  • Не корректно работает rewriteRule в htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteEngine on
    RewriteBase /
    Options +FollowSymlinks
    AddDefaultCharset UTF-8
    ErrorDocument 404 /404.php
    
    
    ############################################################################
    #### Выбор основного зеркала (с www или без www)                        ####
    ############################################################################
       # 2. Добавить www
    RewriteCond %{ENV:HTTPS} on
        #Если включен https
    RewriteRule .* - [E=SSL:s]
        #То создаем переменную  ssl с текстом s
    RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
        # Если нет www в начале домена
    RewriteCond %{REQUEST_URI} !^/robots.*
    	# ваш robots.txt
    RewriteRule ^(.*)$ http%{ENV:SSL}://www.%{HTTP_HOST}/$1 [R=301,L]
        #Подставляем www и https если он включен.
    ############################################################################
    #### Перенаправляем протокол 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]
       # Добавляем слеш в конце.
    
    ############################################################################
    #### Компрессия статического контента для гугл  спид тест               ####
    ############################################################################
    <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)$">
      	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   ####
    ############################################################################
    
    RewriteRule ^([^/.]*)/?$             	      index.php\?la\=$1 [QSA,L]
    RewriteRule ^(.*)/(.*)/?$                     index.php\?la\=$1&url\=$2 [QSA,L] #/ru/forecast/
    RewriteRule ^(.*)/(.*)/(.*)/?$                index.php\?la\=$1&url\=$2&country\=$3 [QSA,L] #/ru/forecast/Russia/
    RewriteRule ^(.*)/(.*)/(.*)/(.*)/?$           index.php\?la\=$1&url\=$2&country\=$3&region\=$4 [QSA,L] #/ru/forecast/Russia/Murmansk
    RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)/?$      index.php\?la\=$1&url\=$2&country\=$3&region\=$4&city\=$5 [QSA,L] #/ru/forecast/Russia/Murmansk/Apatity
    RewriteRule ^(.*)/(.*)/(.*)/(.*)/(.*)/(.*)/?$ index.php\?la\=$1&url\=$2&country\=$3&region\=$4&city\=$5&dop\=$6 [QSA,L] #/ru/forecast/Russia/Murmansk/Apatity/10days - <b>ЗДЕСЬ ПРОБЛЕМА!!!</b>
    
    #########RewriteCond %{THE_REQUEST}  !images
    ########RewriteCond %{THE_REQUEST}  !tr
    ######## А где рул !!!

    Я тут подправил некоторые пункты, так что можешь посмотреть.
    теперь что по поводу твоей пролемы, тут все просто, у тебя частные случаи срабатывают позней общих.
    А в .* у тебя включиться может и / так что это удовлетворяет условию
    если ты хочешь их исключить то пожалуйста вставь в каждую группу [^/] - исключить символ
    ну или попробуй просто поменять местами. как я тебе показал, возможно этого вполне хватит поскольку .htaccess читается с верух в низ. и правила применяются вначале сверху потом снизу ( если до него дойдет)
    Ответ написан
    1 комментарий
  • Как сделать такой 301 редирект?

    shambler81
    @shambler81 Куратор тега htaccess
    Так же у вас будет проблемма и с
    https://site.ru/category/?page=1
    https://site.ru/category/?page=2
    https://site.ru/category/?page=3
    Поскольку пара урл запрос и тайтлы и дескрипшены будут не уникальные, ч то может плохо повлиять на СЕО
    поскольку дубли страниц "канибализируют запрос" особенно это важно для низко и средничастотных, посколкьу в таком случае они могут еще и меняться в выдаче.
    и того решение
    1. Риал каноникал вшытое в шапку, критерий следующий если есть гет параметр то ссылка на страницу без GET.
    В индексе вообще не должно быть ни одной страницы с гет параметром.
    2. Убрать вообще пейдженацию сейчас есть отличное и рекомендованное решение от гугл https://developers.google.com/web/fundamentals/per...
    3. убрать пейдженацию за аякс
    4. исключить пейдженацию в robots.txt как страницы закрытые от индекса
    Ответ написан
    Комментировать
  • 301 редирект со страниц на html на без html cо /?

    shambler81
    @shambler81 Куратор тега htaccess
    я тут все подробно подписал, и привел к стандарту
    https://klondike-studio.ru/standards/standartnyy-h...
    Ответ написан
  • Как задать редирект всех страниц с https на http index.php?

    Не забывай то сртификат на 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 если он включен.
    
    ############################################################################
    #### Перенаправляем протокол http на https                              ####
    ############################################################################
    RewriteCond %{HTTPS} off
       # Проверяем наличие https в URL.
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
       # Перенаправляем протокол на http.
    Ответ написан
    Комментировать
  • Сделать редирект убрать "?start=0" в конце?

    shambler81
    @shambler81 Куратор тега htaccess
    1 и то и друго не является "нормальным" адресом поскольку у них есть гет запрос в любом случае, в следствие этого у вас имеется куча страниц с одинаковыми тайтлами и дескрипшенами, только с разным контентом внутри.
    В следствие этого у вас страниц "тостеры красные бош" будет 30 страниц, по сути каждая страничка пейдженации
    смотри канибализация запросов
    По этому я бы рекомендовал
    1. риал каноникал на страничу без гет параметров
    2. запретить гет запросы в робот txt
    3. Собрать нормальное ЧПУ
    4. пейдженацию убрать за аякс ( опционально)
    5. убрать устаревшую пейдженацию и поставить https://developers.google.com/search/docs/guides/l... он реально крут.

    теперь ответ на твой ответ ;)

    RewriteCond %{QUERY_STRING} (^|&)start\=0($|&)
    RewriteRule ^forum/topic1$ /forum/topic1? [L,R=301]
    Ответ написан
    Комментировать
  • RewriteRule: как добавить файл исключение?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteBase /
    RewriteCond %{SCRIPT_FILENAME} !-f
    RewriteCond %{SCRIPT_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !^/index\.php$
    RewriteRule ^.*$ index.php [L]
    Ответ написан
  • Как перенаправить по определенному слову в URL (htaccess)?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteRule ^api/get\-courses$ /api/index.php? [L,R=301]
    RewriteRule ^api/mobile\.php/get\-courses$ /api/mobile.php? [L,R=301]

    И приведите в чувство задачу, как миниум 3 ошибки в ТЗ так что пришлось додумывать, хоть урлы правильные покажите было стало
    Ответ написан
  • Как настроить редирект с GET с сохранением URL в .htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    Комментировать
  • Проблема в RewriteRule в htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    зачем вот это ?
    RewriteCond $1 !^(index.php|assets|images|js|css|uploads|favicon.png|install|sitemap.xml|robots.txt)
    у вас еж дальше идет исключение и файлов и папок.
    Это весь храксес?
    Ответ написан
    Комментировать
  • 301 редирект с www на без www c https?

    !=on не всегда срабатывает а вот off чаще и вообще этот редирект пишется десятками способов выбери тот что подходит для твоего сервреа.
    Ответ написан
    Комментировать
  • Вероятность взломать редирект сайт?

    сдделай алиас к нужному тебе домени и у тебя будет не 4 а 1 файлик.

    <VirtualHost *:80>
                    DocumentRoot /var/www/clients/client26/web28/web
                    ServerName 5job.ru
                    ServerAlias www.5job.ru site2.ru site4.ru site5.ru www.site3.ru www.site4.ru
                    ServerAdmin webmaster@5job.ru
                    .....

    Как правило это есть в админке
    Ну или самый простой вариант если у тебя это редирект всего домена
    То можно вообще сделатьч ерез CHNAME
    quasiocculti.com/blog/dns-redirect
    Ответ написан
    Комментировать
  • Как сделать исключение для url, чтобы был доступен не по https, а по http?

    RewriteCond %{HTTPS} off
       # Проверяем наличие https в URL.
    RewriteCond %{REQUEST_URI} !/bitrix/admin/1c_exchange.php/$
    # ! - отрицание 
    RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
       # Перенаправляем протокол на http.

    Собственно заменяй свой редирект на https и все страница будет доступна
    не забыай что браузер сам кеширует https запросы и любит ним прицепляться но для обмена с 1с это не повредит.
    проверь онлайн сервисом ответа сервера убедись что 200
    Но лучше конечно поднять план обмена до новой версии, там этих костылей не нужно, он с легкостью работает на https
    Ответ написан
  • Убрать редирект типа HSTS redirect?

    такой каши я давно не видел,
    RewriteRule "(^https?:\/\/([^\/]+\.)?(poimi\.ru|webvisor\.com)\/)" -[L]
    - это что за хрень ? - оно ваще не работает или у вас прям в урле протокол ?
    RewriteRule ^ - [E=protossl:s] балтается в километре от правила.
    там где нужно это применять вы один хер прописываете прямые протоколы
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
      RewriteRule ^ https://%1%{REQUEST_URI} [L,R=301]

    [G,NC] - эо нахера?
    Редиректы до ядра и после, вы уж определитесь.
    Куча ненужных правил
    <IfModule !mod_rewrite.c>
      FallbackResource /index.php
    </IfModule>

    вы уж определитесь есть они у вас или нет.

    RewriteCond %{THE_REQUEST} /index\.php(/(.*?))? [NC]
    - что по вашему эта регулярка выделяет ?
    Ответ написан
  • Редирект на HTTPS с WWW. Как?

    shambler81
    @shambler81 Куратор тега htaccess
    Все достаточно просто и сложно одновременнно, я вангую
    У вас nginx+apache как следствие умный дядя который это делал сделал все по манам в которых на бэкэнде используетяс http ( кстати все маны в интернете содержат эту ошибку) в результате чего у вас http рефери будет или
    site.ru:443 или https://site.ru:80
    или еще что-подобное, в результате будуть происходить циклические редиректы.
    Поскольку бэкэнд ничего не знает о существование фронта.
    Тут можно пойти несколькими путями
    1. перебирать разные написаниея редиректов, ибо их дофига, часть из них может сработать часть нет.
    2. исправить ошибку.
    3. у вас есть другая ошибка и она где-то в коде сайта.
    4. весь htaccess в стоудию.
    5. отвязать редирект для ввв от https в принципе. частично описывал тут https://klondike-studio.ru/standards/standartnyy-h...
    6. https://www.bertal.ru/ тут будет видно что именно в цикле
    Ответ написан
    1 комментарий
  • Как сделать 301 редирект всех картинок из одной папки в другую?

    давай немного поконкретней
    285 - это каталог он меняется? он из цифр? минимально максимально количество символов ?
    525 - это тоже каталог, он обязателен цифры количество?
    Ответ написан
    Комментировать
  • Как в mod_rewire ограничить выражение 7 символами?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(+{1,7})$ /go\?id\=$1 [L]
    Символ 1 от одного до 7 раз
    И кто за вас будет экранировать спецсимволы?
    Ответ написан
    Комментировать