Ru-Board.club
← Вернуться в раздел «В помощь системному администратору»

» Apache+mod_rewrite

Автор: Vanya
Дата сообщения: 30.10.2002 07:53
Значит так-с. (АПАЧ)
Есть такая конструкция http://domain.ru/?id=1
Надо чтобы была такая http://domain.ru/chapter1 ну или http://domain.ru/1
И ко всему прочему, чтобы это еще и работало. Есть такой механизЬм mod_rewrite и что то типа RwriteEngine on прописывается в .htaccess Но как это настраивается чтобы было как мне надо, я не знаю. Кто сможет чем помочь?




FAQ по Apache
Apache + mod_rewrite: замена ссылок
Руководство по URL преобразованиям
Модуль Apache mod_rewrite - подробнейшее описание на русском
Автор: rbt
Дата сообщения: 30.10.2002 11:32
В .хтаксесе пишешь редирект с ошибки 404 на твой скрипт, который, например при помощи регулярных выражений, выбирает из строки (т.е. из адреса) нужные значения, формирует "правильную ссылку" и отправляет по ней юзера.
Автор: lynx
Дата сообщения: 30.10.2002 12:04
rbt

Сам понял, что сказал то?

Vanya

http://httpd.apache.org/docs/mod/mod_rewrite.html#RewriteEngine

Правило чуть позже. Там верно - надо регулярные выражения юзать.
Автор: rbt
Дата сообщения: 30.10.2002 12:16

Цитата:
Сам понял, что сказал то?

Понял:
1. пользователь заходит по адресу www.domain.ru/1

2. Такой страницы не существует, поэтому веб-сервер пересылает юзверя на стандартную стра ницу с сообщением об ошибке 404

3. заменяем эту стандартную страницу об ошибке, на свой скрипт, который анализирут и изменяет адрес, который ввел пользователь и вместо www.domain.ru/1 посылает юзверя на www.domain.ru/?id=1
Автор: Vanya
Дата сообщения: 30.10.2002 12:24
2rbt:
Да не.. в принципе то правильно сказал, такой вариант тоже существует и пишется это в .htaccess примерно так
ErrorDocument 404 /all.php, где последний и есть обработчик. А теперь представьте себе сколько редиректов будет у сайта. Т.е. у меня по каждой ссылке редирект будет что ли? А как пои сковая машина будет себя в таком случае вести? Не плюнет ли она на все редиректы?
Для этого как сказал lynx есть механизм подмены mod_rewrite, и превращения в человеческий урл. Тока вот пока что не могу разобраться во всем это и регвыражениях тоже.

Добавлено
Если я так сделаю, правильно будет?

RewriteRule ^.ru/(.*) /?id=$1
??
Автор: H_e_r_m_i_t
Дата сообщения: 20.05.2003 13:55
А сильно ли грузят сервер эти "замены на человеческий УРЛ"?
Автор: lynx
Дата сообщения: 20.05.2003 21:08
H_e_r_m_i_t


Цитата:
льно ли грузят сервер эти  "замены на человеческий УРЛ"?


нет, копейки, не заметно даже.
Автор: H_e_r_m_i_t
Дата сообщения: 21.05.2003 12:34
lynx
Благодарю!

Еще один вопрос: после таких замен адрес и в адресной строке браузера поменяется на более человеческий или же просто появится возможность вместо mysite.com/index.php?blabla=blabla параллельно использовать и mysite.com/blabla/blabla?
Автор: lynx
Дата сообщения: 21.05.2003 18:37
H_e_r_m_i_t

Цитата:
после таких замен адрес и в адресной строке браузера поменяется на более человеческий


Именно!


Цитата:
ли же просто появится возможность вместо mysite.com/index.php?blabla=blabla параллельно использовать и mysite.com/blabla/blabla?


И то и то!

Когда набираешь:
mysite.com/index.php?blabla=blabla будет конвертиться в mysite.com/blabla/blabla?

Так что можно юзать и то и то.
Автор: H_e_r_m_i_t
Дата сообщения: 07.06.2003 21:06
Божественно!!!
У меня даже без особых проблем заработало!
Было news/article.php?storyid=2 стало news/article2.html

Только вот когда набираю в адресной строке news/article.php?storyid=2 не ковертится в news/article2.html (или и не должно?)
Автор: alexhemp
Дата сообщения: 07.06.2003 21:24
H_e_r_m_i_t
Можешь написать редирект если хочешь

Схема то простая обычно, пишешь в .htaccess
Код:
RewriteRule ^/news/article([0-9]+)\.html$ /news/article.php?storyid=2
Автор: H_e_r_m_i_t
Дата сообщения: 07.06.2003 22:29

Цитата:
На сайте все ссылки нужно строить по схеме со статической адресацией.
Переписывать запрос news/article.php?storyid=2 -> news/article2.html  особого смысла нет, т.к. все равно будет обратно переписан.  

Ага, я уже догадался, но сперва думал, что news/article.php?storyid=2 -> news/article2.html и news/article2.html >> news/article.php?storyid=2 будут одним RewriteRule'ом создаваться.


Цитата:
Чтобы не тормозило, нужно написать сотв. RewriteCond

Благодарю! Буду потихоньку все пробовать.
Да, все ж таки может заметно тормозить?

P.s. Вот уже второй час под впечатлением mod_rewrite'а: когда что-то офигенно длинное и страшное превращается в симпотичное и коротенькое это "унушает"
Автор: H_e_r_m_i_t
Дата сообщения: 19.06.2003 00:15
Люди, объясните темному: если mod_rewrite так хорошо для всех, практически не грузит хостера, то почему его на форумакх не приминяют, чтобы и форумы тоже индексировались?
Автор: lynx
Дата сообщения: 19.06.2003 03:18
H_e_r_m_i_t


Цитата:
почему его на форумакх не приминяют, чтобы и форумы тоже индексировались


Считается излишеством у хостера. Бывает только на платных хостингах. Там - пожалуйста - .htaccess в твоем распоряжении.
Автор: tolsty1
Дата сообщения: 20.06.2003 13:32
lynx

Цитата:

Цитата: после таких замен адрес и в адресной строке браузера поменяется на более человеческий

Именно!
Автор: Sergeant
Дата сообщения: 24.06.2003 13:58
alexhemp,

Цитата:
У меня сделано например в самом начале: RewriteCond !^/images и т.п. по всем каталогам которые не надо проверять на совпадение условиям (forum, templates, admin)

Можно подробнее про это место узнать? У меня сейчас как раз перезаписываются урлы к тем каталогам, которые трогать не надо (тот же images), но подобное условие (как в цитате) не проходит (должен быть еще один аргумент).

Т.е. что-то в этом роде:

Цитата:
RewriteCond ... !^/images

А что вместо точек поставить-то? Ума не приложу..
Автор: alexhemp
Дата сообщения: 24.06.2003 14:27
H_e_r_m_i_t

Цитата:
почему его на форумакх не приминяют, чтобы и форумы тоже индексировались?

Я переписал phpBB2.0.5 + mod_rewrite - весь форум теперь выглядит как статика
Ну разве что в поиске и в админке осталось.


Sergeant
Ну например можно сделать так:

RewriteCond %{REQUEST_URI} !^forum.* [NC]
RewriteCond %{REQUEST_URI} !^images.* [NC]
RewriteCond %{REQUEST_URI} !^admin.* [NC]

А потом уже Все RewriteRule

Логика проста, я не хочу чтобы при получении URL начинающихся с forum, images и admin mod_rewrite пытался найти соотв. им RewriteRule - т.к. его точно нет.
Это стоит в самом начале и дает приличное ускорение кстати.
Флаг NC - no case

Еще рекомендую везде применять влаги L и NS - если нужно просто трансформировать один запрос в другой. Т.к. в противном случае - переписанный URL будет еще раз пропущен через всю цепочку RewriteRule-ов

Еще можно использовать RewriteCond для выделения блоков, т.е. например


Код: RewriteCond %{REQUEST_URI} ^articles.* [NC]
RewriteRule articles([0-9]+).* articles.php?id=$1 [L, NS, NC]
RewriteRule articles([0-9]+)/page([0-9]+).* articles.php?id=$1&page=$2 [L, NS, NC]

RewriteCond %{REQUEST_URI} ^news.* [NC]
RewriteRule news([0-9]+).* news.php?id=$1 [L, NS, NC]
RewriteRule news([0-9]+)/page([0-9]+).* news.php?id=$1&page=$2 [L, NS, NC]
Автор: Sergeant
Дата сообщения: 24.06.2003 15:11
alexhemp,
Не, мне надо чтоб в документе не переписывались ссылки. REQUEST_URI - это запрашиваемый файл только, а в документе всё меняется к чертям и получается бред... вот как с этим бороться?
Автор: Kaa_g
Дата сообщения: 01.08.2003 11:05
Плиз выложите минимальный пример что-бы проверить работает у меня mod_rewrite или нет (можно без регекспов). А дальше сам уже разберусь
Автор: alexhemp
Дата сообщения: 01.08.2003 12:15
Sergeant
Еще раз и медленно!

скрипты принимают параметры

был запрос серверу скажем article5.html - mod_rewrite его переписал в articles.php?id=5
И это призошло _внутри_ апача, клиент ничего про это не знает

Далее скрипт выдал HTML - какие ссылки он выдает - это твое дело

Если хочется псевдо-статику, то скрипты нужно переписывать и всю выдачу вида
<a href="articles.php?id=$id"> переделывать на <a href="article$id.html">

mod_rewrite автоматом не будет тексты скриптов править, он лишь поможет разобрать запрос и вызвать скрипт с параметрами.
Автор: mitrofan
Дата сообщения: 30.10.2003 18:19
Помогите сделать такую фишку (ЧПУ или короткие урл) через mod_rewrite под winXP/apache/php например как на кадетс.ру или на сиберфайт.ру

есть
www.name.com/index.php
www.name.com/story.php?start=0&file=asd
www.name.com/story.php?start=0&file=asdasd
www.name.com/guesbook.php

хочу сделать
www.name.com/news/ , www.name.com/news/1/ , www.name.com/news/2/
www.name.com/story/, www.name.com/story/asd / , www.name.com/story/asdasd/
www.name.com/guesbook/

прописывал в .htaccess
RewriteRule ^news(.*)$ index.php работает , а если поставить слеш т.е.
RewriteRule ^news/(.*)?$ index.php запускается но все ссылки меняются
на www.name.com/news/news/, www.name.com/news/story/ и т.д.

Если кто то знает или сталкивался с такой проблемой напишите пожалуйста
Автор: Bespeka
Дата сообщения: 31.10.2003 06:12
аналогичная проблема:

есть 2 варианта динамики:
1) http://www.domain/folder/?a=show&type=1
2) http://www.domain/folder/?a=show&id=9

хотелось бы получить
1) http://www.domain/folder/type/1
2) http://www.domain/folder/id/9

если можно, черкните полностью все, что надо в htaccess запихнуть
Спасибо!

Добавлено
З.Ы. как я понимаю, можно htaccess ложить прямо в http://www.domain/folder/
Автор: ZiLot
Дата сообщения: 07.02.2004 14:56
Видимо сюда в тему будет.

Апач стоит на Мастдае ХР.
В конфиге апача мод_реврайт прописан на загрузку, НО при вызове php_info() в разделе "Additional Modules" никаких модулей нет. Значит ли это что модуль не загружается? (по идее, он там и не должен отображаться - это ведь инфа по ПХП а не по апачу, просто где-то что-то такое слышал)

Сейчас, если в .htaccess дописать "RewriteEngine On" то при входе по ссылке hттp://domain.ru/что-то_там получаю ошибку 403 и строчку "You don't have permission to access /что-то_там on this server" (причем до РеврайтРулез'ов дело и не доходит, но если в них сделать ошибку, то вылетит Error 500 - Внутренняя ошибка сервера)
При загрузке модуля пробовал писать и полный путь и относительный - одно и то же

Такая проблема только с mod_rewrite - например ограничение доступа через .htaccess прекрасно работает.

Добавлено
ЗЫ: Apache 2.0
Автор: ZiLot
Дата сообщения: 08.02.2004 21:57
Хм... Неужели такой сложный вопрос?
Автор: natpoit
Дата сообщения: 19.06.2004 21:43
Помогите, пожалуйста, , написать в .htaccess
RewriteEngine on
 
чтобы линк в форме  
 
http://www.domain.com/browse.php?cat=xxx  менялся на  
http://www.domain.com/xxx/browse.html  
 
и
http://www.domain.com/detail.php?id=xxx  менялся на  
http://www.domain.com/xxx/detail.html  
 

Заранее спасибо!
Автор: xntx
Дата сообщения: 27.06.2004 01:59
Ой как у вас тут про апач все запущено... Вообще не понятно где обсуждают 1.3 под виндой... ну ладно...
Вобщем, чтоб не создавать новую тему, спрашиваю здесь, а вы как знатоки данного форуме уже пошлите куда надо.
Как поставить mod_rewrite под апач 1.3 который ставился с пакетом myserver?
Вопрос интересует с теоретической точки зрения. Стоит ли с этим мучится, надо ли чтото там компилить, или лучше просто поставить 2.х, настроить ручками пхп и прикрутить реврайт?
Заранее Спасибо.
Автор: Cheery
Дата сообщения: 27.06.2004 02:14
xntx

Цитата:
Как поставить mod_rewrite под апач 1.3 который ставился с пакетом myserver?

дык.. у него есть уже mod_rewrite.so
просто сними комменты в httpd.conf

Цитата:
Вопрос интересует с теоретической точки зрения. Стоит ли с этим мучится, надо ли чтото там компилить, или лучше просто поставить 2.х, настроить ручками пхп и прикрутить реврайт?

кому то нравится 1.. кому то второй. это дело вкуса. и там и там по умолчанию этот модуль есть.
Автор: Demetrio
Дата сообщения: 27.06.2004 14:53
Вот кстати небольшая заметка на тему 'Apache 1.x vs. Apache 2.x'

http://www.onlamp.com/pub/a/apache/2004/06/17/apacheckbk.html
Автор: xntx
Дата сообщения: 06.07.2004 23:59
всем привет.
вот и моя очередь пришла реврайты покорить.
есть задача: имеем папку /lang/ на сервере. имеем еще одну папку в ней. имеем пустой файл index.htm чтобы небыло листания, имеем файл 404.php который просто выдает юзеру хеадерами:

Цитата:
HTTP/1.0 404 Not Found

и всего делов.
имеем .htaccess. что в нем надо прописать (скажите от начала и до конца) чтобы ВСЕ запросы переходили на 404.php (эта папка только инклудится, так что не надо чтоб кулхацкеры об ней знали)

Добавлено
ЗЫ: я наконец поставил своими руками "Apache/2.0.50 (Win32) PHP/4.3.7"
Автор: lynx
Дата сообщения: 07.07.2004 01:31
xntx

Цитата:
имеем .htaccess. что в нем надо прописать (скажите от начала и до конца) чтобы ВСЕ запросы переходили на 404.php


А при чем тут реврайт то?
Если страндартная директива редирект:

http://httpd.apache.org/docs-2.0/ru/mod/mod_alias.html#redirect


Цитата:
Redirect Directive
Description:
Sends an external redirect asking the client to fetch a different URL
Syntax:
Redirect [status] URL-path URL
Context:
server config, virtual host, directory, .htaccess
Override:
FileInfo
Status:
Base
Module:
mod_alias

The Redirect directive maps an old URL into a new one. The new URL is returned to the client which attempts to fetch it again with the new address. URL-path a (%-decoded) path; any requests for documents beginning with this path will be returned a redirect error to a new (%-encoded) URL beginning with URL.
Example:

Redirect /service http://foo2.bar.com/service





Страницы: 1234567891011

Предыдущая тема: Защита от атак: выбор фаервола и антивируса для сисадмина


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.