Rewriterule htaccess

настройка htaccess

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

настройка файла htaccess

Еще раз повторюсь для невнимательных читателей: главная настройка — это что бы файл htaccess был в unix формате:) Меняется формат в блокноте, инструкция на соседней странице. Иначе будете ловить ошибку 500, возможно и без ошибки, но файл не будет выполнять свои функции.

Теперь по порядку основные настройки (вместо адреса сайта-примера прописываете свой)

404 htaccess

Посетитель набравший несушествующий адрес на вашем сайте будет перенаправляться на главную.

ErrorDocument 404 http://www.www.instructing.ru

(таким же образом можно прописать и другие ответы сервера)

htaccess rewriterule

What do I need to get mod_rewrite working?


There’s pretty much only one thing you’ll need to get mod_rewrite working for you,
and that’s to have the mod_rewrite module installed on your Apache server!


For the
purpose of this article, I’m going to assume that you don’t have access to view or edit
the Apache server httpd.conf file, so the easiest way to check whether the mod_rewrite
module is installed will be to look on your phpinfo page. If you’ve not already created
one of these for yourself, just copy and paste the following code into an new text file
using your favourite text editor, save it as phpinfo.php, and upload it to
your server:


Load that page up in your web browser, and perform a search for “mod_rewrite”. All being well,
you’ll find it in the “Apache loaded modules” section of the page. If it isn’t there,
you’ll have to contact your hosting company and politely ask them to add it to the Apache
configuration.


Assuming the mod_rewrite module is loaded, then you’re good to go!

A simple mod_rewrite example

%N

${mapname:key|default}

%{NAME_OF_VARIABLE}

[

], -

отрезает её автоматически.
Это автоматическое усечение подразумеваемое при внешнем редиректе

полезная и важная особенность при использовании в
связке с запросами к массивам преобразований генерирующих
имя хоста. Взгляните на первый пример, в разделе примеров ниже, чтобы понять это.

Помните

Безусловный внешний редирект
на ваш собственный сервер не будет работать с префиксом

Удаление дублей страниц.

Если вы хотите, чтобы все запросы на domain.ru,

Filename: .htaccess

Test

Upload this file to folder1 with FTP:

Filename: index.html

Then, visit in your browser. You should see the URL change to and the test page content.

Code explanation

  • Options +FollowSymLinks is an Apache directive, prerequisite for mod_rewrite.
  • RewriteEngine On enables mod_rewrite.
  • RewriteCond %{HTTP_HOST} shows which URLs we do and don't want to run through the rewrite.
    • In this case, we want to match example.com.
    • ! means "not." We don't want to rewrite a URL that already includes folder1, because then it would keep getting folder1 added, and it would become an infinitely long URL.
  • [NC] matches both upper- and lower-case versions of the URL.
  • RewriteRule defines a particular rule.
  • The first string of characters after RewriteRule defines what the original URL looks like. There's a more detailed explanation of the special characters at the end of this article.
  • The second string after RewriteRule defines the new URL. This is in relation to the document root (html) directory. / means the html directory itself, and subfolders can also be specified.
    • $1 at the end matches the part in parentheses () from the first string. Basically, this makes sure that sub-pages get redirected to the same sub-page and not the main page. Leave it out to redirect to the main page of the subdirectory.
  • [R=301,L] - this performs a 301 redirect and also stops any later rewrite rules from affecting this URL (a good idea to add after the last rule). It's on the same line as RewriteRule, at the end.
  • In this case, we want to match example.com.
  • ! means "not." We don't want to rewrite a URL that already includes folder1, because then it would keep getting folder1 added, and it would become an infinitely long URL.

Отдаваемых файлов конкретного типа]править[

Вместо .js можно указать несколько типов файлов, разделяя их пробелами.

Управление доступом]править[

Запрет доступа к файлам]править[

  • HTTP_USER_AGENT
  • HTTP_REFERER
  • HTTP_COOKIE
  • HTTP_FORWARDED
  • HTTP_HOST
  • HTTP_PROXY_CONNECTION
  • HTTP_ACCEPT
  • REMOTE_ADDR
  • REMOTE_HOST
  • REMOTE_USER
  • REMOTE_IDENT
  • REQUEST_METHOD
  • SCRIPT_FILENAME
  • PATH_INFO
  • QUERY_STRING
  • AUTH_TYPE
  • DOCUMENT_ROOT
  • SERVER_ADMIN
  • SERVER_NAME
  • SERVER_ADDR
  • SERVER_PORT
  • SERVER_PROTOCOL
  • SERVER_SOFTWARE
  • TIME_YEAR
  • TIME_MON
  • TIME_DAY
  • TIME_HOUR
  • TIME_MIN
  • TIME_SEC
  • TIME_WDAY
  • TIME
  • API_VERSION
  • THE_REQUEST
  • REQUEST_URI
  • REQUEST_FILENAME
  • IS_SUBREQ

Working With Multiple Rules

The more complicated a site, the more complicated the set of rules governing it can be. This can be problematic when it comes to resolving conflicts between rules. You will find this issue rears its ugly head most often when you add a new rule to a file, and it doesn't work. What you may find, if the rule itself is not at fault, is that an earlier rule in the file is matching the URL and so the URL is not being tested against the new rule you've just added.

In the example above, the product pages of a site and the blog post pages have identical patterns. The second rule will never match a URL, because anything that would match that pattern will have already been matched by the first rule.

There are a few ways to work around this. Several CMSes (including wordpress) handle this by adding an extra portion to the URL to denote the type of request, like so:

You could also write a single PHP script to process all requests, which checked to see if the second part of the URL matched a blog post or a product. I usually go for this option, as while it may increase the load on the server slightly, it gives much cleaner URLs.


RewriteEngine on
RewriteRule ^product/([^/.]+)/?$ product.php?id=$1 [L]

Another example, rewrite from:

www.yoursite.com/script.php?product=123 to www.yoursite.com/cat/product/123/


RewriteRule cat/(.*)/(.*)/$ /script.php?$1=$2

Removing query strings

Как не стать бесплатным поставщиком изображений и файлов?

Есть ли защита от этого? Да, есть! Чтобы запретить другим сайтам пользоваться вашим трафиком и/или просто указывать прямые ссылки на ваши файлы (картинки), то добавьте в ваш .htaccess файл следующие строки:

В итоге все остальные сайты получат ошибку 403 Forbidden (т.е. Доступ запрещен) и ваша пропускная способность больше «не работает на других».

24. ImageCache и защита от хотлинка через .htaccess

Для ImageCache предыдущий пункт работать не будет, поэтому добавляем такие настройки:

Теперь у нас есть и защита от хотлинка и модуль ImageCache — вместе они работают превосходно. Одно «но» — таким способом, как вы видите не получится выдавать другую картинку; только защита своих изображений, что и является основной целью.

25. Мало этого?

Вот лучшие и подробные ресурсы по магическому.htaccess в Интернете:

Наверх