Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » mod_rewrite: документация, готовые решения, вопросы

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

Открыть новую тему     Написать ответ в эту тему

Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mod_rewrite

Вот уже несколько раз встретился с этим вопросом. Недавно в тех. задании было указано что проект должен быть оптимизирован под поисковые системы. Поискав немного попал на mod_rewrite. Оказывается что mod_rewrite очень и очень полезная вещь. Вот несколько причин почему я решил разобраться с данным зверем:
 

  1. Если вы пишите форумы, сайт с новостями или любой сайт в котором есть конструкция hттp://mybestsite.com/article.php?n=3&page=1. Вы рано или поздно встретитесь с проблемой лицом к лицу, у таких сайтов есть огромный минус: адрес сайта выглядит для пользователей не "нормально", такой адрес не индексируется многими поисковыми системами, удаляется все после знака "?". Ниже приведенные ссылки для него все одни, но просмотрев их он получает разное содержимое (Что плохо сказывается на статистику вашего сайта)

    Код:
    hттp://mybestsite.com/article.php?n=3&page=1
    hттp://mybestsite.com/article.php?n=5&page=2
    hттp://mybestsite.com/article.php?n=6&page=7

    Пользователи у которых нету базовых знаний в Web программировании не могут понять что значит текст после article.php (?n=3&page=1). С использованием mod_rewrite можно на лету преобразовывать адреса типа

    Код:
    hттp://mybestsite.com/article.php?n=3&page=1

    в такой, более понятный и привычный для обыкновенных пользователей

    Код:
    hттp://mybestsite.com/articles/3/page1.htm

    А самое интересное что файл page1.htm вообще не существует, и пользователю не известен путь к файлу к которому он обращается и поисковые системы воспринимают такой адрес как обыкновенную ссылку на html страничку.
     
  2. С помощью mod_rewrite можно запретить скачивать ваши материалы с других сайтов, на собирание которых вы провели бессонные ночи. Например: у вас есть файл bestprogram.zip, у вас на страничке есть линк

    Код:
    <a href="hттp://mybestsite.com/download/bestprogram.zip">Download</a>

    какой-то придурок залазит на ваш сайт, просмотривает html код вашей странички и размещает туже ссылку но уже у себя на сайте.

    Код:
    <a href="hттp://mybestsite.com/download/bestprogram.zip">Download</a>

    и она будет работать без проблем, за трафик будет платить вы а слава и благодарности этому придурку! С помощью mod_rewrite можно запретить cкачивание файлов если referer не ваш сайт

 
Думаю этого достаточно что бы потратить несколько часов на изучение данного материала. Ниже привожу документацию по данному вопросу:
Русские ресурсы

Английские ресурсы

 
Необходимые навыки:

 
Настройка журналирования (Лога):
 
Чтобы включить лог mod_rewrite необходимо в описании вашего виртуального хоста (обычно это файл httpd.conf) добавить две строчки:  

Код:
Код:RewriteLog /путь/к/лог/файлу  
RewriteLogLevel 9  

И перезапустить апача. Крайне не рекомендуется производить это на работающем сервере, так как объемы отладочной информации генерируются действительно большие и найти свое бывает очень сложно.
 
ps: Доп ссылки
Много полезных примеров, но на английском http://www.askapache.com/htaccess/mod_rewrite-tips-and-tricks.html




PHP тут не совсем к месту в названии, потому убрал /Cheery/

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 15:26 24-06-2005 | Исправлено: Cheery, 01:07 11-10-2011
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Weinaum
main.php есть или нет?  
 
RewriteRule ^main\.php / [L]
такое пробовали?

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 11:46 13-02-2014
Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
 
Вообще не срабатывает, как будто нет ничего...

Всего записей: 2155 | Зарегистр. 18-06-2006 | Отправлено: 12:23 13-02-2014
MisHel64



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Weinaum Может для начала покажешь, как ты делаешь?
Что-то мне подсказывает, что достаточно сделать
RewriteRule ^main.php$ / [NC,L]
Если main.php на site.de отсутствует.

Всего записей: 2307 | Зарегистр. 21-09-2006 | Отправлено: 12:34 13-02-2014
Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MisHel64
да так и делаю, как вы предлагаете, и как описывает google подобную, казалось бы простую задачу: переадресовать с конкретного несуществующего адреса в корень....
Чтобы не быть голословным, вот - только плз не сочтите за спам, если что после решения уберу ссылки:
 
http://www.sp-trans.gr - посмотрите куда бросает, именно этот урл вел на прежней версии сайта сразу же на греческий язык.
Что еще характерно - если попробовать перейти с того же домена, но без www - http://sp-trans.gr, редирект ведет в корень, и все корректно.  
Т.е. понятно, что надо изменить редирект в консоли греческого домена, но хотелось бы хотя бы временно закрыть эту брешь с помощью .htaccess и mod_rewrite, бо пока дождешься чего то от греков...
 

Всего записей: 2155 | Зарегистр. 18-06-2006 | Отправлено: 20:26 13-02-2014
MisHel64



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Weinaum Может для начала покажешь, как ты делаешь?  

Короче. HtAccess В студию.

Всего записей: 2307 | Зарегистр. 21-09-2006 | Отправлено: 21:23 13-02-2014
Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MisHel64

Цитата:
Короче. HtAccess В студию.

стандартный от joomla, добавлена только склейка с www и без  
Подробнее...
То что выше предлагали пробовал, сейчас убрал.

Всего записей: 2155 | Зарегистр. 18-06-2006 | Отправлено: 21:32 13-02-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Weinaum

Цитата:
То что выше предлагали пробовал, сейчас убрал.

а куда вы его добавляли? в какую часть?

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:12 13-02-2014
MisHel64



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
да так и делаю, как вы предлагаете, и как описывает google подобную, казалось бы простую задачу: переадресовать с конкретного несуществующего адреса в корень....  

А он именно так и делает, с той правкой, что я дал.
Но твои правила перебрасывают из корня на index.php, передавая ему параметры.
И уже он не может найти страницу соответствующую параметрам, и светит 404.
 
пробуй
RewriteRule ^main\.php$ http://www.sp-trans.de/index.php [R=301,L]
или
RewriteRule ^main\.php$ http://www.sp-trans.de/index.php? [R=301,L]
или
RewriteRule ^main\.php$ http://www.sp-trans.de/? [R=301,L]
 
Если параметры не потеряются, то ищи как их потерять. Я лично не знаю.
Или ковыряй index.php, далее два варианта.
Если потеряются, то можно дальше подумать, как по красивее сделать.
Возможно так:
RewriteRule ^main\.php$ index.php? [NC, L]
 
Вставлять перед этой: # If the requested path and file is not /index.php and the request

Всего записей: 2307 | Зарегистр. 21-09-2006 | Отправлено: 22:22 13-02-2014 | Исправлено: MisHel64, 22:33 13-02-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MisHel64

Цитата:
Но твои правила перебрасывают из корня на index.php, передавая ему параметры.  
И уже он не может найти страницу соответствующую параметрам, и светит 404.  

 
сдается мне, что правило было указано ниже переброса на index.php, в этом и есть причина.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:32 13-02-2014
MisHel64



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery По барабану в принципе. Толку от этого правила было НОЛЬ. И не важно куда его втыкать.
Мы же оба внутренний редирект советовали.

Всего записей: 2307 | Зарегистр. 21-09-2006 | Отправлено: 22:34 13-02-2014 | Исправлено: MisHel64, 22:38 13-02-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MisHel64

Цитата:
Мы же оба внутренний редирект советовали.

ну и ладно, плохо то от того, что ссылка не поменялась, не стало бы.
главное добиться сначала, чтобы 404 не было.
 
а втыкать.. если ниже перебрасывания на index.php, то до него и не доходит, поэтому и не работает.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:41 13-02-2014
MisHel64



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery Так тут не классический 404. И не по урлу он генерился.
А типичный 200, а потом уже якобы 404 из-за квери.
 

Цитата:
а втыкать.. если ниже перебрасывания на index.php, то до него и не доходит, поэтому и не работает.

Если выше, то  
1й шаг наше правило /main.php на / поменяет
2й шаг его правило / на /index.php поменяет
3й шаг ничего не мнется на выходе /index.php
 
Если ниже
1й шаг его правило /main на /index.php поменяет
2й шаг ничего не мнется на выходе /index.php
 
Так что не важно где, результат один.
 
 

Всего записей: 2307 | Зарегистр. 21-09-2006 | Отправлено: 22:48 13-02-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MisHel64

Цитата:
А типичный 200, а потом уже якобы 404 из-за квери

ай.. надоело уже.
там ЧПУ, и на query ему все равно - он не может найти ничего из содержимого, чтобы относилось к main.php
элементарная проверка http://www.sp-trans.de/?seite=1&sprache=2
ну, нет же 404? ошибка именно из за main.php


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:53 13-02-2014 | Исправлено: Cheery, 22:53 13-02-2014
MisHel64



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
там ЧПУ, и на query ему все равно - он не может найти ничего из содержимого, чтобы относилось к main.php

Тогда тем более, внутренний редирект ситуации не спасет, и смысла не имеет.

Всего записей: 2307 | Зарегистр. 21-09-2006 | Отправлено: 23:00 13-02-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MisHel64

Цитата:
Тогда тем более, внутренний редирект ситуации не спасет,

чем же не спасет?? он будет выдавать что нужно, пусть и с query куском, который можно убрать и потом, это не срочно.  
 

Цитата:
Если ниже  
1й шаг его правило /main на /index.php поменяет  

если ниже, то он до него не дойдет вообще - на index.php перекидываются все несуществующие URL/пути в файловой системе
и этот index.php и генерит 404 страницу, так как не знает какой странице соответстует main.php
 
Weinaum
короче, добавьте первой строкой в .htaccess
RedirectMatch 301 ^/main\.php http://www.sp-trans.de/?

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:05 13-02-2014 | Исправлено: Cheery, 23:12 13-02-2014
MisHel64



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
чем же не спасет??
А почему он должен спасти?
Во первых опять же попадаем на /index.php, в реквесте по прежнему сидит /main.php
И совершенно не важно, был внутренний редирескт на / или его не было.
Скрипт то о нем никогда не узнает.
Что бы поменялся $_SERVER['REQUEST_URI'] и аналогичные нужен именно внешний редирект. А $_SERVER['SCRIPT_NAME'] по любому будет указывать на /index.php, не важно был ли редирект, и был он внутренним или внешним.

Всего записей: 2307 | Зарегистр. 21-09-2006 | Отправлено: 23:15 13-02-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MisHel64
ок, я, почему то, немного о другом задумался (бывает, когда делаешь несколько дел одновременно).
но все равно ниже переброса на index.php нельзя - никогда недойдет до него.
только если main.php файктически существует.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:22 13-02-2014 | Исправлено: Cheery, 23:23 13-02-2014
MisHel64



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Weinaum короче, добавьте первой строкой в .htaccess  
RedirectMatch 301 ^/main\.php http://www.sp-trans.de/?

Вот и я про то. Спасет только внешний редирект.
И если вы правы, и на квери движку наплевать, то знак вопроса в конце не нужен, но и не помешает.
 
Хотя я бы лично затычку поставил именно на PHP, из одной строки.
Что-то типа:
<?php header('Location: http://www.sp-trans.de',true,301); exit; ?>
 
И поисковикам клеить проще будет, и адрес красявей получится, и мозг кипятить не надо.
 
Добавлено:

Цитата:
но все равно ниже переброса на index.php нельзя - никогда недойдет до него.

Как я уже писал выше, абсолютно по барабану, дойдет или нет. Результат будет один.
Если мы о первом варианте решения.
Те, что с внешним редиректом, те да, уже критично.

Всего записей: 2307 | Зарегистр. 21-09-2006 | Отправлено: 23:23 13-02-2014
Weinaum



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
MisHel64
 
Все, спасибо, все работает
вот эти 2 варианта -  

Код:
RewriteRule ^main\.php$ http://www.sp-trans.de/index.php? [R=301,L]
или
RewriteRule ^main\.php$ http://www.sp-trans.de/? [R=301,L]  

работают оба корректно,  

Код:
RewriteRule ^main\.php$ http://www.sp-trans.de/index.php [R=301,L]  

и  

Код:
RedirectMatch 301 ^/main\.php http://www.sp-trans.de/?

 
редиректят правильно, но урлы в адресной строке не чистят.
 
А вот этот

Код:
RewriteRule ^main\.php$ index.php? [NC, L]  

выдает error 500
 
И да, я вставлял как раз в это самое место, сразу после склейки.
 
Еще раз спасибо, буду знать насчет index.php ))))

Всего записей: 2155 | Зарегистр. 18-06-2006 | Отправлено: 23:33 13-02-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Weinaum

Цитата:
редиректят правильно, но урлы в адресной строке не чистят.  

должны (если в конечном адресе указано ?).  
 

Цитата:
выдает error 500

смотрите лог ошибок сервера - там указана причина

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:37 13-02-2014 | Исправлено: Cheery, 23:42 13-02-2014
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

Компьютерный форум Ru.Board » Интернет » Web-программирование » mod_rewrite: документация, готовые решения, вопросы


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru