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

» Apache + mod_rewrite: замена ссылок

Автор: SplideX
Дата сообщения: 13.06.2003 12:57
У меня вопрос ко всем. Как при помощи mod_rewrite сделать так чтобы ссылка типа http://host/index.php?param=view была как http://host/view/ ?





FAQ по Apache
Apache + mod_rewrite: замена ссылок
Руководство по URL преобразованиям
Модуль Apache mod_rewrite - подробнейшее описание на русском
Автор: batva
Дата сообщения: 13.06.2003 13:19
Зачем тебе слеш в конце?
А если его не будет, должно ведь тоже пахать?!


В часности:

RewriteRule ^/view(/?)$ /index.php?param=view[L]


А в общем так:

RewriteRule ^/(.*)$ /index.php?param=$1[L]

Добавлено
А вообще такие вопросы лучше сюда >>>
Автор: SplideX
Дата сообщения: 13.06.2003 14:26
спасибо :)


Цитата:
А в общем так:

RewriteRule ^/(.*)$ /index.php?param=$1[L]


только я сам так делал, но не работает.
пишу
http://test/view - 404
http://test//view - норма
с двумя и более слэшами работает, с одним не хочет.
не пойму почему.
Автор: alexhemp
Дата сообщения: 13.06.2003 16:14
SplideX
Попробуй убрать первый слеш.

У меня вот так примерно сделано... Это самый простое RewriteRule

Код: RewriteRule ^news/([0-9]+)[/]? news.php?id=$1 [L,NC,NS]
Автор: ASteel
Дата сообщения: 13.06.2003 16:32
SplideX
Потому, что у тебя


Цитата:

RewriteRule ^/(.*)$ /index.php?param=$1[L]


а хост определяется как "http://www.test.test/"
с финальным слешем.
А ты пытаешься его к файлу спереди прицепить.
т.е.


Код:
RewriteRule ^(.*)$ /index.php?param=$1[L]
Автор: SplideX
Дата сообщения: 13.06.2003 20:14
ASteel
У меня апач на это вешается :)
Автор: ASteel
Дата сообщения: 13.06.2003 21:16
SplideX
Млин. Забыл ;( Сорри.
Естественно.

Надо выходить из положения так (по крайней мере я так вышел):

Код:
RewriteRule ^index\.php(.*)$ - [L]
RewriteRule ^(.*)$ /index.php?param=$1 [L]
Автор: L0Ve
Дата сообщения: 14.06.2003 02:46
ASteel

Цитата:
а чем index.php не подходит под правило ^(.*)$

тем, что [L]
Автор: SplideX
Дата сообщения: 14.06.2003 15:43
ASteel
Так работает. Только не отображаются внутренние ссылки на картинки и css. В общем картинок и форматирования нету.
Автор: woffer
Дата сообщения: 07.09.2003 21:42
Наверное, сюда -)
1.У меня есть правило вида

Код: RewriteRule ^news/([0-9]+)[/]?$ news.php?id=$1
Автор: Cheery
Дата сообщения: 07.09.2003 21:56

Цитата:
Подозреваю, что лучше с точки зрения производительности второе, так ли это ?

Не важно.. апач все папки сверху вниз просматривает на наличие htaccess

Цитата:
Как в этом случае корректно отработать слэш ?

самим скриптом..
Автор: woffer
Дата сообщения: 07.09.2003 22:29
Cheery

Цитата:
Не важно.. апач все папки сверху вниз просматривает на наличие htaccess

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

Цитата:
самим скриптом..

Эх -)

Автор: Cheery
Дата сообщения: 07.09.2003 22:35
woffer

Цитата:
Это да. Не о том я -) Я о том, что если к корень положить, то будут проверяться каждый раз много условий для подкаталогов (много лишний проверок, которых не будет, в случае закидывая htaccess в каждый подкаталог)

Ну дык это зависит от содержимого

Цитата:
Эх -)

Наверно можно и rewrite.. Но для этого нужен хоть какой нить вид переменной..
например, если число, то проверять, что параметр является числом..
вот так.. [0-9]
Автор: woffer
Дата сообщения: 07.09.2003 22:37
Cheery

Цитата:
Ну дык это зависит от содержимого

Да, конечно
Любопытно на эмпирическую информацию посмотреть -)

Цитата:
Наверно можно и rewrite.. Но для этого нужен хоть какой нить вид переменной..
например, если число, то проверять, что параметр является числом..
вот так.. [0-9]

Угу, для числа так и сделано, весь интерес был, как сделать rewrite, если вид неизвестен
Спасибо.
Автор: Kaa_g
Дата сообщения: 10.09.2003 17:14
Помогите плиз у меня путь к картинкам такой /images/gh.gif а сам файл лежит в папке /news/news.php при этом я использую правило
RewriteRule ^news/news([0-9]+)\.htm$ /news/news.php?CuurPage=$1 [L]
все работает я попадаю на страницу /news/news9.htm то есть все работает нормально но при этом в логах пишут такое

127.0.0.1 - - [10/Sep/2003:17:14:56 -0700] [127.0.0.1/sid#795a08][rid#87a048/initial] (2) [per-dir e:/server/htdocs/] rewrite news/2/69news.htm -> /news/news.php?CuurPage=2&id=69
127.0.0.1 - - [10/Sep/2003:17:14:56 -0700] [127.0.0.1/sid#795a08][rid#87a048/initial] (1) [per-dir e:/server/htdocs/] internal redirect with /news/news.php [INTERNAL REDIRECT]
127.0.0.1 - - [10/Sep/2003:17:14:56 -0700] [127.0.0.1/sid#795a08][rid#880440/initial/redir#1] (1) [per-dir e:/server/htdocs/] pass through e:/server/htdocs/news/news.php

А дальше он начинает на это правило проверять все ссылки на графыческие файлы

127.0.0.1 - - [10/Sep/2003:17:14:56 -0700] [127.0.0.1/sid#795a08][rid#42a0040/initial] (1) [per-dir e:/server/htdocs/] pass through e:/server/htdocs/bioinfo.css
127.0.0.1 - - [10/Sep/2003:17:14:56 -0700] [127.0.0.1/sid#795a08][rid#42a0040/initial] (1) [per-dir e:/server/htdocs/] pass through e:/server/htdocs/news/2
127.0.0.1 - - [10/Sep/2003:17:14:56 -0700] [127.0.0.1/sid#795a08][rid#42a0040/initial] (1) [per-dir e:/server/htdocs/] pass through e:/server/htdocs/images/1_1.jpg
127.0.0.1 - - [10/Sep/2003:17:14:56 -0700] [127.0.0.1/sid#795a08][rid#42a0040/initial] (1) [per-dir e:/server/htdocs/] pass through e:/server/htdocs/images/1_3.jpg[q]

и так все ссылки внутри самого документа

Из этого вопрос нормально ли это или нужно с помощью RewriteCond как-то этим управлять если да то подскажите как это сделать
Автор: Nazarius
Дата сообщения: 08.10.2003 11:53
Хочу возобновить тему )
У меня чей-то не получается с mod_rewrit"ом.
Когда пишу
RewriteRule ^index\.html$ index.php [R]
то при заходе на
http://localhost/new/index.html
оно переходит на адрес:
http://localhost/d:/www/new/index.php

И вообще - вот мой хтаккес - скажите что не правильно:

Options ExecCGI FollowSymLinks Includes MultiViews
RewriteEngine on
RewriteBase /new/
RewriteRule ^index\.html$ index.php [R]
Автор: Kaa_g
Дата сообщения: 08.10.2003 13:29
Попоробуй поставить так
RewriteRule ^index\.html$ /index.php [R]
или
RewriteRule ^index\.html$ /new/index.php [R]

по идие первый вариант должен работать хотя у меня с RewriteBase как-то не сложилось.
Автор: Nazarius
Дата сообщения: 21.10.2003 10:10
Kaa_g
Пасиба! Все получилось.
Но возникли новые проблемы.
Например, как обрабатывать внутренние ссылки?
Я пишу
RewriteRule ^service/(.+)$ /article.php?cat=service#$1 [L]
то есть хочецца, чтобы юзер писал http://.../service/book
а получал /article.php?cat=service#book
в артыкле есть ссылка <a name="book">
Так вот, артыкле то оно открывает, но по внутренней ссылке не идет
Что мне делать?
Автор: SplideX
Дата сообщения: 14.12.2003 13:39
А как сделать редирект на поддомен?
Например набилаю www.lalalala.com а оно берет документы с new.lalalala.com ?
Автор: LaSet
Дата сообщения: 11.01.2004 05:54
помогите пожалуйста с:

http://url/index.php?action=view&view=category&catid=31&catflag=4&sublevel=2

в http://url/31/4/2


http://url/index.php?&action=view&view=category&catid=31&catflag=4&sublevel=2&start=10

в http://url/31/4/2/10.html


http://url/index.php?action=view&view=entry&entryid=478

в http://url/478.html

Спасибо!
Автор: seva1
Дата сообщения: 04.04.2004 17:21
Народ у меня точно скрипт рабочий так как на хосте пашет, но на локалке не хочет как настроить аппач то? искал тут на руборде но именно про настройку не нашел!
Автор: lynx
Дата сообщения: 04.04.2004 17:25
seva1

Цитата:
Народ у меня точно скрипт рабочий так как на хосте пашет, но на локалке не хочет как настроить аппач то? искал тут на руборде но именно про настройку не нашел!


Скажи, пожалуйста, а при чем тут замена ссылок с помощью mod_rewite?

Вот это читай:

Установка Apache 2.x, PHP4, PERL и MySQL на localhost под Windows

Добавлено
login: forum
pass: forum
Автор: CTaJIuH
Дата сообщения: 07.08.2004 15:55
Я совсем запутался с этим мод_реврайт. Кто-нибудь может человеческим языком объяснить возможно ли чтобы на сайте ВСЕ урл вида www.site.com/blabla.php?p=nazvanie
превращались в www.site.com/blabla/nazvanie/ ?
Автор: SplideX
Дата сообщения: 21.09.2004 08:33
продолжение поста (http://forum.ru-board.com/topic.cgi?forum=8&bm=1&topic=7931#1).

в общем суть в том есть в корне файл .htaccess


Код:
AddDefaultCharset windows-1251
Options +FollowSymlinks
Options -Indexes
RewriteEngine on
RewriteBase /

RewriteRule ^(.*)$ /site/$1
Автор: Cheery
Дата сообщения: 21.09.2004 08:36
SplideX

Цитата:
тоже не катит, т.к.

вернее еще лучше.. а почему бы не написать в httpd.conf для того домена, что хочешь, а не в htaccess? или укажи для какого домена хочешь оставить. и решается это всего лишь добавлением еще одного условия.
А еще лучше - сформулируй полностью задачу. Для каких доменов работать форвард должен, а для каких нет.

Цитата:
Т.е. ошибка 500. Почему?

я тебе объяснил, как узнать почему.. а еще проще
RewriteLog "/webserver/logs/rewrite.log"
RewriteLogLevel 9
тогда точно узнаешь почему.
Автор: mitrofan
Дата сообщения: 16.10.2004 20:28
Не работает mod_rewrite под apache 1, хотя под apache 2 все нормально.

Под apache 1 в настройках httpd.conf модуль включен:
LoadModule rewrite_module modules/ApacheModuleRewrite.dll
может еще что-нибудь надо прописать ?
Или выложите нормальные настройки httpd.conf под apache 1 сюда или на мыло sliderule(собак)mail.ru

В логах mod_rewrite вроде ошибок нет

Может надо дописать что-нибудь в .htacceess

файл .htacceess:

RewriteEngine On
RewriteBase /portfolio
RewriteRule portfolio/?$ index.php?p=portfolio
RewriteRule profile/?$ index.php?p=profile
RewriteRule contact/?$ index.php?p=contact
RewriteRule links/?$ index.php?p=links
RewriteRule portfolio/([0-9A-Za-z.]+)/?$ index.php?p=portfolio&ws=$1
RewriteRule portfolio/([0-9A-Za-z.]+)/([0-9]+)/?$ index.php?p=portfolio&ws=$1&v=$2
RewriteRule preview/([0-9A-Za-z./_-]+)?$ preview.php?s=$1
RewriteRule contact/send/?$ index.php?p=send

И еще меня удивило что под apache 1 надо дописывать слеш в конце, например http://localhost/portfolio/, то есть http://localhost/portfolio - не будет работать, а в apache2 все нормально ?

Вообщем такой трабл, заранее благодарю всех за помощь
Автор: H_e_r_m_i_t
Дата сообщения: 25.10.2004 00:01
Имеется следующий вопрос: есть site.com/aaa/ , необходимо организовать что бы при запросе пользователем какого либо файла в site.com/aaa/ (и субдиректориях) без изменения адреса в адресной строке браузера выдавался запрашиваемый файл из bbb.site.com/aaa/

В .htaccess'е вроде бы должно быть что-то такое:

RewriteCond %{HTTP_HOST} ^site.com/aaa/$ [NC]
RewriteRule (.*) bbb.site.com/aaa/%{REQUEST_URI} [P]

? Но такой вариант выдает 404-ую ошибку. Где порылась собака?
Автор: Cheery
Дата сообщения: 25.10.2004 00:07
H_e_r_m_i_t

Цитата:
? Но такой вариант выдает 404-ую ошибку. Где порылась собака?

смотрим error_log
в RewriteRule насколько помню нет серверных переменных и тем более %{REQUEST_URI}
http://httpd.apache.org/docs/mod/mod_rewrite.html#RewriteRule
Автор: Zapadlo
Дата сообщения: 02.11.2004 23:06
Не могу разобраться как просто заменить внутри ссылки кусок строки, который может находиться в любом ее месте, вроде бы пример простой, каталог игр для телефонов

ссылка может выглядеть так
http://site.ru/game0001
а может так
http://site.ru/phone01/game0001
или так
http://site.ru/phone01/genre1/page2
то есть различные параметры могут нахоиться в разных местах илисовсем отсутствовать....
Удобнее всего было бы просто пройтись и проверить на наличие всех параметров, то есть напримересли встретилось в строке
/page2 преобразоать в &page=2 и пр, а все примеры с которыми приходилось сталкиваться приводятся на случаях когдакаждый параметр расположен фиксированно.....
Автор: Zapadlo
Дата сообщения: 03.11.2004 13:08
Что, никто так и не поможет?
Мож непонятно объяснил, попробую понятнее
Как в ссылке просто заменить один кусок строки на другой, например string1 на string2?
Rewriterule ^(.*)string1(.*)$ $1srtring2$2 почему-то упорно не прокатывает

Страницы: 12

Предыдущая тема: Запуск прог и Доступ к папкам Windows под цигвином (cygwin)


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