Разработчикам   / шаблоны сайтов / создание сайтов / форум / партнерство
Авторизация Закрыть [x]  
     
   
Запомнить / Напомнить
SiteEdit

Найти:


Карта сайта

Сайт разработчиков SiteEdit

Файл конфигурации .htaccess

Категории:

.htaccess

.htaccess (с точкой в начале имени) - это файл-конфигуратор Apache-серверов, который дает возможность конфигурировать работу сервера в отдельных директориях (папках), не предоставляя доступа к главному конфигурационному файлу. Например, устанавливать права доступа к файлам в директории, менять названия индексных файлов, самостоятельно обрабатывать ошибки Apache, перенаправляя посетителей на специальные страницы ошибок. .htaccessпредставляет собой обычный текстовый документ, расширение которого htaccess. Данный файл обычно находится в корне сайта, однако Вы можете создавать и дополнительные .htaccess-файлы для различных директорий Вашего сайта.

Mod_rewrite - модуль, используемый веб-серверами для преобразования URL'ов.

Варианты реализации Редиректа с помощью файла .htaccess

1. Простой редирект:

Redirect 301 / http://www.domainname.ru/
или
redirect /secret http://www.site.ru/nosecret
Ставится в файле .htaccess или httpd.conf для Apache. Первый "/" означает, что всё с верхнего уровня сайта, включая все подкаталоги, будет переадресовано (не забывайте поставить последний "/"). Если Вы хотите переадресовать только страницу, сохранив PR старой страницы, можно сделать так:

Redirect 301 /old/old.htm http://www.you.ru/new.htm где:
/old/old.htm - путь и имя старой страницы
http://www.you.com/new.htm - новый путь и новое имя перемещенной страницы

2. Редирект на любую страницу по ip пользователя или при запросе конкретной страницы (а также по маске имени).

Если у пользователя ip 192.152.37.125, то он будет перенаправлен на страницу user.php:
SetEnvIf REMOTE_ADDR 192.152.37.125 REDIR="redir"

RewriteCond %{REDIR} redir RewriteRule ^/$ /user.php

3. Редирект при запросе определённых файлов.

Если запрашиваются файлы, расширение которых не указано в файле .htaccess (gif и jpg), то следует перенаправление:
RewriteEngine On RewriteRule !.(gif|jpg)$ index.php

4. Использование mod_rewrite:

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^yourdomain\.ru
RewriteRule ^(.*)$ http://www.yourdomain.ru/$1 [R=permanent,L]

Прописывается в файле .htaccess.

5. Редирект с регулярным выражением:

RedirectMatch 301 (.*) http://www.yourdomain.ru$1
Прописывается в файле .htaccess.
(.*) RedirectMatch фактически соответствует регулярным образцам выражения после доменного имени. Таким образом, нельзя выполнить соответствие образца на ^/yourdomain.ru. Однако, можно преобразовать страницы с использованием .html расширения к файлам того же самого названия, но с .php расширением:
RedirectMatch 301 (.*)\.html$ http://www.yourdomain.ru$1.php
Если необходимо сделать различное перенаправление для отдельных страниц, можно использовать следующее:
RedirectMatch Permanent ^/html/resources.html$
http://www.newdomain.com/resources.php RedirectMatch Permanent ^/html/other_page.html$
http://www.newdomain.com/other_page.php RedirectMatch Permanent ^/(.*)$ http://www.newdomain.com/
"
RedirectMatch Permanent" - это эквивалент "RedirectMatch 301", строка с "*(Wildcard)" должна быть последней в этом списке.

6. Создание удобо читаемых URL

Чтобы преобразовать, например, www.site.ru/product.php?id=123 в www.site.ru/product/123 следующим образом:
RewriteEngine on

RewriteRule ^product/([^/\.]+)/?$ product.php?id=$1 [L]
В следующем примере преобразуем www.site.ru/script.php?product=123 в www.site.ru/cat/product/123/:
RewriteRule cat/(.*)/(.*)/$ /script.php?$1=$2

7. Редирект на PHP:

header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.newdomain.ru/newdir/newpage.htm");
exit();
Естественно, надо создать страницу, при обращении к которой и будет происходить Редирект, и разместить её на сервере. И лучше укажите HTTP/1.1 (а не HTTP/1.0 или HTTP/0.9, которые не поддерживают виртуальный хостинг)

8. Редирект всех файлов в папке на один файл.

Например вы больше не нуждаетесь в разделе сайта Super discount и хотите перенаправить все запросы к папке /superdiscount на один файл /hot-offers.php. Для этого добавляем в .htaccess следующий код.
RewriteRule ^superdiscount(.*)$ /hot-offers.php [L,R=301]

9. Редирект всей папки кроме одного файла

В следующем примере все файлы из папки /superdiscount будут редиректится на на файл /hot-offers.php, КРОМЕ файла /superdiscount/my-ebook.html котоый должен редиректится на /hot-to-make-million.html
RewriteRule ^superdiscount/my-ebook.html /hot-to-make-million.html [L,R=301]
RewriteRule ^superdiscount(.*)$ /hot-offers.php [L,R=301]

10. Редирект динамического URL на новый файл.

Данный вариант пригодится если вы хотите редиректить динамический URL с параметрами на новый статический файл.
RewriteRule ^article.jsp?id=(.*)$ /latestnews.htm [L,R=301]
То есть теперь, запрос к файлу вида http://www.kass.ws/article.jsp?id=8632 и/или http://www.kass.ws/article.jsp?id=1245 будет отправлен на файл http://www.kass.ws/latestnews.htm.

11. Массовый редирект новых файлов.

Тепепь перейдем к самому сложному моменту, когда вам надо редиректить массу URL-ов, например после смены вашей CMS. Тут сразу возникает ряд проблем. Во-первых, внесение всех изменившихся адресов в .htaccess файл займет очень много времени, да и само по себе занятие малоприятное. Во-вторых, слишком много записей в .htaccess файле будут тормозить Apache сервера. И в третьих, при внесении такого количества информации высока вероятность, что вы где то ошибетесь. По этому, самый лучший выход, это нанять програмиста который вам напишет динамический редирект.
Нижеприведенный пример написан на PHP, но так же может быть выполнен на любом языке. Предположим вы перешли на новую систему ссылок на вашем сайте и все файлы оканчивающиеся на старый id должны быть средирекчены. Сначала создаем в базе таблицу, которая содержит старый id и новый URL для редиректа. old_id INT new_url VARCHAR (255) Далее пишем код который свяжет ваши старые id с новыми URL-ами
После этого, добавляем следующую строчку в .htaccess:
RewriteRule ^/product-(.*)_([0-9]+).php /redirectold.php?productid=$2 

затем создаем PHP файл redirectold.php, который будет поддерживать 301 редирект:
<?php
function getRedirectUrl($productid) {
// Connect to the database
$dServer = "localhost";
$dDb = "mydbname";
$dUser = "mydb_user";
$dPass = "password";
s = @mysql_connect($dServer, $dUser, $dPass)
or die("Couldn't connect to database server");
@mysql_select_db($dDb, $s) or die("Couldn't connect to database");
$query = "SELECT new_url FROM redirects WHERE old_id = ". $productid; mysql_query($query);
$result = mysql_query($query);
$hasRecords = mysql_num_rows($result) == 0 ? false : true;
if (!$hasRecords) {
$ret = 'http://www.yoursite.com/';
} else {
while($row = mysql_fetch_array($result)) {
$ret = 'http://www.yoursite.com/'. $row["new_url"];
}
}
mysql_close($s);
return $ret;
}

$productid = $_GET["productid"];
$url = getRedirectUrl($productid);
header("HTTP/1.1 301 Moved Permanently");
header("Location: $url");
exit();
?>
Теперь все запросы к вашим старым URL-ам будут вызывать redirectold.php,
который найдет новый URL и вернет 301 ответ с вашей новой ссылкой.
 
Copyright © Edgestile Company, 2004-09
тел.:  8 (495) 229-45-50, 8 (812) 777-01-30, 8 (34241) 3-69-90
e-mail:  info@siteedit.ru - общие вопросы
icq: 268-447-867 - общие вопросы
все контакты