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

    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]
       # Добавляем слеш в конце.
    Ответ написан
  • Как настроить htaccess с указанием переадресации с www на без с учётом ЧПУ?

    shambler81
    @shambler81 Куратор тега htaccess
    1. А че у вас редирект с ввв стоит после чпу ? вообще-то хтаксесс читается сверху вниз. И если вы хотите более раннего применения, милости просим, переместите вверх.
    2. у вас дуратское ЧПУ
    оно у вас не учитывает собственно файлов и директориев.

    RewriteCond %{REQUEST_FILENAME} !-f
    #это не файл
    RewriteCond %{REQUEST_FILENAME} !-l
    # и это не линка
    RewriteCond %{REQUEST_FILENAME} !-d
    # и это не директория
    # и  защита от циткла, это не сам файл 
    RewriteCond %{REQUEST_FILENAME} !/index.php$
    RewriteRule ^([a-z0-9\-/]+)$ index.php\?url=$1 [L]


    Этого хватило ?
    если нет то опишите более подробно ру это у вас физический файл каталог в общем чуть больше инфы, много ли таких ру или он один и можно сделат просто исключение.
    Ответ написан
  • Может ли из-за чпу сбиться кодировка в бд?

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

    shambler81
    @shambler81 Куратор тега htaccess
    Кто спецсимволы будет экранировать ?
    Вообще-то для реврайт конд этот символ % используется.
    И очень удобная штука например
    RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

    А вы его не экранируете.
    \%
    Ответ написан
  • Как правильно сделать редирект в .htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    https://www.donatstudios.com/RewriteRule_Generator
    она умеет делать и редиректы с гетом и без гетов,
    единственное она не умеет делать редирект на урл с гетом, посколку перев ? не ставит \? , но это можнро и руками сделать.
    Теперь по слешу.
    Он должен быть по умолчанию.
    но тут нужно чуть больше исключений чем кажется.

    ############################################################################
    #### Убираем повторяющиеся слеши (/) в 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.
    ############################################################################
    #### Компрессия статического контента для гугл  спид тест               ####
    ############################################################################
    <IfModule mod_deflate.c>
      # Compress HTML, CSS, JavaScript, Text, XML and fonts
      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 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>
    Ответ написан
    Комментировать
  • Не работает относительная ссылка на index.html в дочерней директории?

    shambler81
    @shambler81 Куратор тега htaccess
    вижу кучу ошибок, вначале их исправь.
    1. хост в ввв пишется с экраном точек,
    www\.comics-man\.ru
    во вторых я бы вообще от домена избавился, да и с https нужно правильно работать.
    RewriteCond %{SERVER_PORT} !^443$
    RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
    RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
    
    RewriteCond %{SERVER_PORT} ^443$
    RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
    RewriteRule ^(.*)$ https://%1/$1 [R=301,L]


    Далее проще через REQUEST_URI
    RewriteCond %{REQUEST_URI} ^(.*)/index\.html$
    RewriteRule ^(.*)$ %1/ [R=301,L]

    А то что вы делаете это просто удаляете все.

    теперь с удалением слеша в конце, вообще семантически его какрк-таки нуно ставить.
    но это уже на ваше совести.
    по идее все наоборот.
    ############################################################################
    #### Убираем повторяющиеся слеши (/) в 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]


    Ну да и не забудь рекомендации гугл
    <IfModule mod_deflate.c>
      # Compress HTML, CSS, JavaScript, Text, XML and fonts
      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 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 комментарий
  • Как правильно прописать код в .htaccess для выполнения действия зсилання во внутреннюю папку?

    shambler81
    @shambler81 Куратор тега htaccess
    Если вам нужно так сделать со ВСЕМИ запросами
    то конечно проще поменять в конфиге апача DocumentRoot
    Ответ написан
    Комментировать
  • Как сделать перенаправление с поддоменов на основной домен?

    shambler81
    @shambler81 Куратор тега htaccess
    а нехрен его располагать в папке /var/www
    и тому подобное.
    Поскольку у вас есть конфиг default.conf в котоом собираются все "мусорные" запросы
    типа дев нула дял сайтов.
    Как правило особо отличившиеся ставят сайтв эту папку В следсвтвие чего этот сайт доступен по любому домену который сошлется на этот сайт, любому айпи и тд. . А по сути в ней должно лежать "здрасти вы ошиблись сайтом но сервер тот "
    А вот для реальных сайтов создаются свои конфиги с прописаными путями до файлов.
    Тогда апачь попадает по http заголовку в нужный сайт.
    В вашем же случае сайт test.ru скорее всего лежит именно в таком месте, как вариант создать под него отдельнй виртуалхост и не праиться.
    Ответ написан
    Комментировать
  • Как сократить ссылкy?

    shambler81
    @shambler81 Куратор тега htaccess
    Это урл с гет запросом, гет не является частью request_uri по этому им управляют отдельно.
    RewriteCond %{QUERY_STRING} (^|&)page\=catalog($|&)
    RewriteCond %{QUERY_STRING} (^|&)cat\=2499($|&)
    RewriteRule ^index\.php$ /catalog/2499? [L,R=301]

    Вопрос в конце удалит гет параметр
    Ответ написан
  • Вирус на сайте, который плодит файлы редиректов htaccess - как избавиться?

    shambler81
    @shambler81 Куратор тега htaccess
    Качаешь запускаешь с консоли, можно через пхп собственно но я бы с консоли лучше запускал.
    Дальше ждешь когда просканит
    открываешь статистику.
    Удаляешь вирусы согласно написаному.
    ТАм будут и файлы и место.
    если сам не сможешь написать скрипт по удалению кидай лог сюда, только регуляркой замени домен на site.ru - дабы люди ушлые не воспользовались.
    revisium.com/ai/index.php?q=8271542351504877357110...
    че за зверь такой читаешь тут
    https://revisium.com/ai/
    Ответ написан
    Комментировать
  • Как настроить редирект на cms arwshop.ru?

    shambler81
    @shambler81 Куратор тега htaccess
    а с какого перепугу они должны работать ?
    У тебя в руле гет параметр, который не является частью урла в принципе.
    Что ты от него хочешь ?

    Вот тебе счастье
    https://www.donatstudios.com/RewriteRule_Generator
    Дальше только подставишь свои маски.
    кстати{1,255}можно смело заменить на {1,}- что означает от одного и выше
    А вот [0-9a-zA-Z\x80-\xFF\x20\/\_\] я так понимаю можно сократить и до +
    Ответ написан
  • Как убрать get параметры из редиректа?

    shambler81
    @shambler81 Куратор тега htaccess
    www.site.ru/pravoslavnie-molitvoslovi/\?
    Вот так
    Ответ написан
  • Как настроить редирект с помощью .htaccess?

    shambler81
    @shambler81 Куратор тега htaccess
    да такое вполне возможно, и все что содержит два слеша вполне себе можно удалить, но что при этом будет с сайтом ? допустим я перекину тебе все запросы на site.com/articles а что дальше ?
    одна и та же страница будет одаваться ?
    Или у тебя там стоит некое ЧПУ которое будет обрабатывать гет запросы скажем ?id=/qwerty/12345
    Но про это небыло ничего в тз.
    Ты хочешь сделать 1 урл нескольким страницам ?
    в чем смысл?
    или это 1 урл и 1 страница ?
    Ответ написан
  • Как прописать RewriteRule gallery?s=blabla -> gallery/blabla?

    shambler81
    @shambler81 Куратор тега htaccess
    не совсем понятно что имено нужно сделать, вот варианты.
    # 301 --- http://site.ru/gallery?s=blabla => http://site.ru/gallery/blabla
    RewriteCond %{QUERY_STRING} (^|&)s\=blabla($|&)
    RewriteRule ^gallery$ /gallery/blabla? [L,R=301]

    Если вам нужно наоборот то скорее всего вы решили сделать свой блэкджек ну там знаете..
    Вам тогда нужно узнать что такое ЧПУ
    site.softmaker.kz/php/nastrojka-chpu-ssylok-url-ph...

    Вот пример ЧПУ, в вашем случае будет видимо по другому.
    RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-l
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
            RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]
            RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]


    Опишите более подробно задачу.
    Меняются ли урлы или он 1 ?
    нужен ли код 301 или пойдет 200
    Должна ли меняться ссылка в браузере ?
    Ответ написан
  • Как в htaccess сократить ссылку?

    shambler81
    @shambler81 Куратор тега htaccess
    RewriteCond %{QUERY_STRING} (^|&)cat\=([0-9]{1,})($|&)
    #СООТВЕТСТВЕННО ЦИФРЫ МОЖНО ЗАМЕНИТЬ РЕГУЛЯРКОЙ НАПРИМЕР [0-9]{1,} В ТАКОМ СЛУЧАЕ ЭТО БУДЕТ ЦИФРЫ ОТ 1 ШТУКИ И БОЛЬШЕ
    RewriteRule ^(.*) /%2? [L,R=301]


    А еше лучше напишитте пример ссылки какая была какая надо, можно нескольк штук, я сделаю более четкую регулярку.
    Ответ написан
  • Почему не работает редирект?

    shambler81
    @shambler81 Куратор тега htaccess
    Попробуй менее точное регулярное выражение, найди что не так и проверь
    RewriteRule job/$ http://site.org/jobs/ [R=301,L]
    RewriteRule ^job$ http://site.org/jobs/ [R=301,L]
    RewriteRule +.job/$ http://site.org/jobs/ [R=301,L]

    Не забыай каржый раз открывать брузер инкогнито
    Так же не забывай поставить это перед ЧПУ сайта
    А желательно в самый верх.
    И да не работает это ?
    1. нет редиректа
    2. не туда
    3. ошибка сервера
    Ответ написан
  • Как правильно настроить редирект?

    shambler81
    @shambler81 Куратор тега htaccess
    А так ?
    RewriteEngine On
    RewriteBase /
    
    RewriteCond %{HTTP_HOST} .
    RewriteCond %{HTTP_HOST} !^www\.redisrus\.ru [NC]
    RewriteRule (.*) www.redisrus.ru/$1 [R=301,L]
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(ru|en)/favicon.ico$ favicon.ico [L,QSA]
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(ru|en)/assets(.*)$ assets$2 [L,QSA]
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(ru|en)?/?(.*)$ index.php\?cultureKey=$1&q=$2 [L,QSA]
    
    RewriteCond %{REQUEST_URI} /index.php
    RewriteCond %{QUERY_STRING} ^\z
    RewriteRule ^(.*)$ www.redisrus.ru/\? [R=301,L]
    
    Redirect 301 /news/890 www.redisrus.ru/new/id-890?
    
    php_flag register_globals Off
    фphp_flag zlib.output_compression On
    php_value zlib.output_compression_level 5
    
    ExpiresActive On
    ExpiresByType image/gif A2592000
    ExpiresByType image/jpeg A2592000
    ExpiresByType image/png A2592000
    BrowserMatch "MSIE" brokenvary=1
    BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
    BrowserMatch "Opera" !brokenvary
    SetEnvIf brokenvary 1 force-no-vary
    Ответ написан
  • Как объединить 2 htaccess в один?

    shambler81
    @shambler81 Куратор тега htaccess
    А зачем вам два .htaccess
    Положите хтаксесс в папку форума и все.
    у него будет свой у основного сайта свой.
    По моему так куда как логичней.
    Ответ написан
    Комментировать
  • Как избавиться от index.php в адресе с помощью .htaccess в laravel?

    shambler81
    @shambler81 Куратор тега htaccess
    Правильно ли я понимаю что у вас был сайт без чпу и с GET запросами.
    Тепеерь у вас урлы обычные и вы сделали редирект всех старых урлов на новый сайт на корень ?
    Если так то
    1. соберите полный список старых проиндексированых урлов.
    2. соответствено в экселе соберите список новых урлов по принципу старый урл новый урл.
    3. Давай партянкой сюда.
    4. Если же вам пофигу на сео то, насколько я понимаю у вас проблема что гет запросы остаются в урле.
    Так это решает ся очень просто
    ^(.*)/$ /$1\? вопрос в конце редиректа удалит все гет запросы, НО ПОСКОЛЬКУ у вас нет списка старых гет запросов ваше правило обрежет и все местные если они будут.
    ТАк что вернитесь к пункту 1.
    Ответ написан
  • Редирект со слеша на без слеша у get-параметров?

    shambler81
    @shambler81 Куратор тега htaccess
    get не является частью урла, {REQUEST_URI} банально не к нему.

    # 301 --- http://www.mydefile.ru/company/?section=torgovlya&PAGEN_1=9 => http://www.mydefile.ru/about/
    RewriteCond %{QUERY_STRING} (^|&)section=torgovlya($|&)
    RewriteCond %{QUERY_STRING} (^|&)PAGEN_1=9($|&)
    RewriteRule ^company/$ /about/? [L,R=301]


    Обратите внимание на ? в конце реврайт рула, он удалит сам гет.
    Так же если вам нужно будет сделать редирект НА страницу с GET, не забывайте его экранировать
    RewriteRule ^company/$ /about/\?=тут_гет_если_он_будет_нужен&уже_экранировать_не_надо[L,R=301]

    Не забудьте поставить решено
    Ответ написан
    4 комментария