• Вход
  • Регистрация

htaccess и его использование


    Фотография
       (0 голосов)
    Данной теме более 240 дней, она устарела.
    Файл .htaccess является сердцем веб сервера, который работает под управлением Apache. В данной теме вы найдете примеры 301 редиректа htaccess с одной страницы на другую и на другой сайт, а так же как можно его использовать на DLE

    Именно здесь определяется реакция сервера на различные действия посетителя. в данном уроке приводится несколько приемов для использования в файле .htaccess.

    Ниже вы найдете:
    • htaccess rewriterule примеры
    • filesmatch htaccess примеры
    • htaccess чпу примеры
    • 301 редирект примеры htaccess
    • пример htaccess для html
    • пример htaccess для DataLife Engine


    Чтобы использовать вырезки кода, их надо просто скопировать в файл .htaccess который располагается в корневом каталоге вашего сайта.

    Предупреждение: перед редактированием файла .htaccess нужно всегда делать резервную копию работающего варианта!

    Принудительная постановка замыкающего слеша
    Считается, что замыкающий слеш в адресе URL очень хорошо помогает в области SEO сайта. Следующий код всегда будет добавлять слеш в адрес URL вашего сайта.
    <IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_URI} /+[^\.]+$
    RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
    </IfModule>


    Предотвращаем хотлинк ресурсов сайта
    Хотлинк (использование изображений вашего сайта другими сайтами в сети) является весьма популярной практикой, которая прожигает впустую трафик вашего сервера. Следующий код будет перенаправлять все хотлинк запросы к изображениям вашего сайта на определенную картинку, адрес которой задается в строке 6.
    RewriteEngine On
    #Замените ?mysite\.com/ на адрес вашего блога
    RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC]
    RewriteCond %{HTTP_REFERER} !^$
    #Замените /images/nohotlink.jpg на ваше изображение с запрещением хотлинка
    RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]


    Перенаправляем мобильные устройства
    Если ваш сайт не использует адаптивный дизайн, то будет очень полезно перенаправить мобильные устройства на специальную версию сайта
    RewriteEngine On
    RewriteCond %{REQUEST_URI} !^/m/.*$
    RewriteCond %{HTTP_ACCEPT} "text/vnd.wap.wml|application/vnd.wap.xhtml+xml" [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} "acs|alav|alca|amoi|audi|aste|avan|benq|bird|blac|blaz|brew|cell|cldc|cmd-&#
    34; [NC,OR] RewriteCond %{HTTP_USER_AGENT} "dang|doco|eric|hipt|inno|ipaq|java|jigs|kddi|keji|leno|lg-c|lg-d|lg-g|lge-&
    #34; [NC,OR] RewriteCond %{HTTP_USER_AGENT} "maui|maxo|midp|mits|mmef|mobi|mot-|moto|mwbp|nec-|newt|noki|opwv" [NC,OR] RewriteCond %{HTTP_USER_AGENT} "palm|pana|pant|pdxg|phil|play|pluc|port|prox|qtek|qwap|sage|sams|sany" [NC,OR] RewriteCond %{HTTP_USER_AGENT} "sch-|sec-|send|seri|sgh-|shar|sie-|siem|smal|smar|sony|sph-|symb|t-mo" [NC,OR] RewriteCond %{HTTP_USER_AGENT} "teli|tim-|tosh|tsm-|upg1|upsi|vk-v|voda|w3cs|wap-|wapa|wapi" [NC,OR] RewriteCond %{HTTP_USER_AGENT} "wapp|wapr|webc|winw|winw|xda|xda-" [NC,OR] RewriteCond %{HTTP_USER_AGENT} "up.browser|up.link|windowssce|iemobile|mini|mmp" [NC,OR] RewriteCond %{HTTP_USER_AGENT} "symbian|midp|wap|phone|pocket|mobile|pda|psp" [NC] #------------- Строка ниже исключает iPad RewriteCond %{HTTP_USER_AGENT} !^.*iPad.*$ #------------- RewriteCond %{HTTP_USER_AGENT} !macintosh [NC] RewriteRule ^(.*)$ /m/ [L,R=302]


    Принудительная загрузка файлов определенного типа
    По некоторым причинам вам может потребоваться принудительная загрузка файлов определенных типов (например, MP3 или XLS). Нижеприведенный код будет предотвращать чтение таких файлов браузером и принудительно запускать загрузку.
    <Files *.xls> ForceType application/octet-stream Header set Content-Disposition attachment
    </Files>
    <Files *.eps> ForceType application/octet-stream Header set Content-Disposition attachment
    </Files>


    Междоменное использование шрифтов для FireFox
    При использовании встроенных шрифтов Firefox не позволяет брать их с внешних сайтов. Следующий код для файла .htaccess позволит обойти данное ограничение.
    <FilesMatch "\.(ttf|otf|eot|woff)$">
    <IfModule mod_headers.c>
    #Замените yourdomain.com на адрес вашего блога Header set Access-Control-Allow-Origin "http://yourdomain.com"
    </IfModule>
    </FilesMatch>


    Ускоряем сайт с помощью кэширования .htaccess
    Используя кэширование .htaccess можно существенно увеличить скорость сайта.
    # 1 ГОД
    <FilesMatch "\.(ico|pdf|flv)$">
    Header set Cache-Control "max-age=29030400, public"
    </FilesMatch>
    # 1 НЕДЕЛЯ
    <FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
    Header set Cache-Control "max-age=604800, public"
    </FilesMatch>
    # 2 ДНЯ
    <FilesMatch "\.(xml|txt|css|js)$">
    Header set Cache-Control "max-age=172800, proxy-revalidate"
    </FilesMatch>
    # 1 МИНУТА
    <FilesMatch "\.(html|htm|php)$">
    Header set Cache-Control "max-age=60, private, proxy-revalidate"
    </FilesMatch>


    Конфигурируем сайт для видео HTML5
    HTML5 привнес много новшеств в мир веб разработки. Возможность проигрывать видео без использования FLASH является одной из лучших особенностей HTML5. Хотя нужно правильно сконфигурировать сервер для корректной работы с последними стандартами видео HTML5.
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !=/favicon.ico
    AddType video/ogg .ogv
    AddType video/ogg .ogg
    AddType video/mp4 .mp4
    AddType video/webm .webm
    AddType application/x-shockwave-flash swf


    Записываем ошибки PHP в журнал
    Вместо вывода ошибок PHP на страницах вашего сайта (что дает информацию потенциальным хакерам…) можно записывать их в журнал (файл .log), скрывая от посетителей.
    # отключаем вывод ошибок пользователям
    php_flag display_startup_errors off
    php_flag display_errors off
    php_flag html_errors off
    # заносим ошибки в журнал
    php_flag log_errors on
    php_value error_log /location/to/php_error.log


    Запускаем PHP в файлах jаvascript
    При разработке кода jаvascript иногда требуется использовать PHP в файлах .js. Например, для получения данных из базы.
    AddType application/x-httpd-php .js
    AddHandler x-httpd-php5 .js
    <FilesMatch "\.(js|php)$">
    SetHandler application/x-httpd-php
    </FilesMatch>


    301 редирект с одной страницы на другую

    Самый простой вариант
    Redirect 301 /test-1/ http://site.ru/test-2/

    Более подробный
    RewriteCond %{REQUEST_URI} ^/test/$ RewriteRule ^.*$ http://site.ru/new-test/? [R=301,L]


    301 редирект с www на без www (главное зеркало – домен без www)
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ RewriteRule ^(.*)$ http://%1/$1 [L,R=301]

    В начале файла .htaccess нужно добавить:
    RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L]

    301 редирект с без www на www (главное зеркало – домен с www)
    RewriteCond %{HTTP_HOST} ^([^www].*)$ RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]

    301 редирект со страниц со слешем на без слеша (весь сайт)
    RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} ![^\/]$ RewriteRule ^(.*)\/$ /$1 [R=301,L]

    301 редирект со страниц без слеша на слеш (часто в CMS системах устанавливается автоматически)
    RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteRule ^(.*[^\/])$ /$1/ [R=301,L]

    Один (а не два последовательных!) 301 редирект на без www и с слешем на конце адреса страницы
    RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteCond %{HTTP_HOST} ^www\.(.*)$ RewriteRule ^(.*)$ http://%1/$1/ [L,R=301]

    RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} ![^\/]$ RewriteCond %{HTTP_HOST} ^www\.(.*)$ RewriteRule ^(.*)$ http://%1/$1 [L,R=301]

    RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteCond %{HTTP_HOST} ^([^www].*)$ RewriteRule ^(.*)$ http://%1/$1/ [L,R=301]

    Один (а не два последовательных!) 301 редирект на c www и со слешем на конце адреса страницы
    RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteCond %{HTTP_HOST} ^www\.(.*)$ RewriteRule ^(.*)$ http://www.%1/$1/ [L,R=301]

    RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteCond %{HTTP_HOST} ^([^www].*)$ RewriteRule ^(.*)$ http://www.%1/$1/ [L,R=301]

    RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} ![^\/]$ RewriteCond %{HTTP_HOST} ^([^www].*)$ RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]

    Один (а не два последовательных!) 301 редирект на c www и без слеша на конце адреса страницы
    RewriteCond %{REQUEST_URI} ^\/$ RewriteCond %{HTTP_HOST} ^([^www].*)$ RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]

    RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} \/$ RewriteCond %{HTTP_HOST} ^www\.(.*)$ RewriteRule ^(.*)\/$ http://www.%1/$1 [L,R=301]

    RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteCond %{HTTP_HOST} ^([^www].*)$ RewriteRule ^(.*)$ http://www.%1/$1 [L,R=301]

    RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} \/$ RewriteCond %{HTTP_HOST} ^([^www].*)$ RewriteRule ^(.*)\/$ http://www.%1/$1 [L,R=301]

    Один (а не два последовательных!) 301 редирект на без www и без слеша на конце адреса страницы
    RewriteCond %{REQUEST_URI} ^\/$ RewriteCond %{HTTP_HOST} ^www\.(.*)$ RewriteRule ^(.*)$ http://%1/$1 [L,R=301]

    RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} \/$ RewriteCond %{HTTP_HOST} ^www\.(.*)$ RewriteRule ^(.*)\/$ http://%1/$1 [L,R=301]

    RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} !\/$ RewriteCond %{HTTP_HOST} ^www\.(.*)$ RewriteRule ^(.*)$ http://%1/$1 [L,R=301]

    RewriteCond %{REQUEST_URI} !\? RewriteCond %{REQUEST_URI} !\& RewriteCond %{REQUEST_URI} !\= RewriteCond %{REQUEST_URI} !\. RewriteCond %{REQUEST_URI} \/$ RewriteCond %{HTTP_HOST} ^([^www].*)$ RewriteRule ^(.*)\/$ http://%1/$1 [L,R=301]

    301 редирект только адреса site.ru/index.php (без GET параметров) на основное зеркало site.ru
    RewriteCond %{REQUEST_URI} /index.php RewriteCond %{QUERY_STRING} ^\z RewriteRule ^(.*)$ http://site.ru/? [R=301,L]

    301 редирект всех адресов с index.php и GET параметрами на страницы только с GET параметрами (вырезать в url index.php)
    Пример: перенаправление site.ru/index.php?n=1 на site.ru/?n=1
    RewriteCond %{REQUEST_URI} /index.php RewriteRule ^(.*)$ http://site.ru/ [R=301,L]

    301 редирект url с GET параметрами (динамический URL) на статический
    Вариант №1 (простой адрес с GET параметром):
    RewriteCond %{QUERY_STRING} ^id=229 RewriteRule ^.*$ /supermodel/? [R=301,L]

    Вариант №2 (со страницы и GET параметром)
    RewriteCond %{REQUEST_URI} /test/ RewriteCond %{QUERY_STRING} ^id=229 RewriteRule ^.*$ /supermodel/? [R=301,L]

    Все страницы одного домена на главную страницу другого домена
    RewriteCond %{REQUEST_URI} (.*) RewriteRule ^(.*)$ http://site.ru/ [L,R=301]

    Каждая страница одного домена на такой же адрес другого url
    RewriteCond %{REQUEST_URI} (.*) RewriteRule ^(.*)$ http://site.ru/$1 [L,R=301]


    Пример использования в DataLife Engine на примере личных сообщений
    # Личные сообщения
    RewriteRule ^pm(/?)+$ /?do=pm [L]
    RewriteRule ^pm/inbox(/?)+$ /?do=pm&doaction=inbox [L]
    RewriteRule ^pm/outbox(/?)+$ /?do=pm&doaction=outbox [L]
    RewriteRule ^pm/newpm(/?)+$ /?do=pm&doaction=newpm [L]
    RewriteRule ^pm/newpm/([0-9]+).html(/?)+$ /?do=pm&doaction=newpm&user=$1 [L]
    RewriteRule ^pm/([0-9]+).html(/?)+$ /?do=pm&doaction=readpm&pmid=$1 [L]
    RewriteRule ^pm/reply/([0-9]+).html(/?)+$ /?do=pm&doaction=newpm&replyid=$1 [L]


    Пример использования для регистрации и восстановления пароля в DataLife Engine
    RewriteRule ^registration.html$ index.php?do=registration [L]
    RewriteRule ^lostpassword.html$ index.php?do=lostpassword [L]




      Cказали спасибо: alexx
      Спасибо большое за статью. Я у себя использую такой вот вариант от лича картинок
      RewriteCond %{HTTP_REFERER} !^$
      RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?site.ru [NC]
      RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?images.google.com [NC]
      RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?images.google.ru [NC]
      RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?images.yandex.ru [NC]
      RewriteCond %{REQUEST_URI} !^/leech.webp [NC]
      RewriteRule .(gif|jpg|jpeg|png)$ https://< site.ru/leech.webp [R,NC]

      p.s. site.ru замените на адрес своего сайта

      Время посл. редактирования: 6-06-2022, 11:05
        Спасибо, еще не выражали.

        С момента последнего сообщения прошло более 60 дней.
        • Количество пользователей, читающих эту тему: 1   0 пользователей, 1 гостей


        Информация
        Посетители, находящиеся в группе Гости, не могут оставлять ответы в данном форуме.

        • АКТУАЛЬНАЯ ВЕРСИЯ 6.0.0

          Для бесплатной версии актуальная версия 3.0.

        • ДЕМО САЙТ: DEMO.EVOBB.RU

          Демо сайт форума версии 6.0.0.

        • Помощь проекту

            Собрано 529.00 рублей

            Вы можете пожертвовать небольшую сумму денег, которая поможет развитию форума EVObb и нашего ресурса.
        • Внесли свой вклад

          • Нет аватарки
            От archi: Пользователь не оставил комментария
          • Нет аватарки
            От compik: На развитие форума
          • Нет аватарки
            От Igor: Пользователь не оставил комментария
          • Нет аватарки
            От flour: Пользователь не оставил комментария
          • Нет аватарки
            От Олег Концов: Пользователь не оставил комментария
          • Нет аватарки
            От Олег Концов: Пользователь не оставил комментария
        • Изменения статуса

        • Самые активные