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

» mod_rewrite: документация, готовые решения, вопросы

Автор: dacuan
Дата сообщения: 20.07.2011 14:47
crimea360

Цитата:
тоже бесконечный редирект

Вставляйте лог
Автор: crimea360
Дата сообщения: 21.07.2011 09:34
dacuan

Там проблему решили, добавили слешы.

Тут другая проблемма. Надо символ пробела заменить на дефис.

Например /temp/test%20page на /temp/test-page
Автор: dacuan
Дата сообщения: 21.07.2011 10:10
crimea360

Цитата:
Тут другая проблемма. Надо символ пробела заменить на дефис.

а зачем это делать mod_rewrite'ом?
Автор: crimea360
Дата сообщения: 21.07.2011 11:25
dacuan

Потому что в движек никто лезть не хочет... Пришлось залезть -)))
Автор: gidrosoldat
Дата сообщения: 25.07.2011 18:42
Доброе время суток, господа програмисты )
Вопрос по существу - как включить ЧПУ в Kohana?
Kohana у меня открывается по линку http://kohana/. Версия Kohana PHP Framework, version 3.1 (release)
Делаю так:
1). Переименовываю example.htaccess в .htaccess
Содержимое .htaccess:
------------------------------------------------
# Turn on URL rewriting
RewriteEngine On

# Installation directory
RewriteBase /

# Protect hidden files from being viewed
<Files .*>
    Order Deny,Allow
    Deny From All
</Files>

# Protect application and system files from being viewed
RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]

# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]

------------------------------------------------
2). В bootstrap.php устанавливаю:

Kohana::init(array( 'base_url' => '/', 'index_file' => '' ));

3). В апаче модуль Rewrite включен
httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so - раскомментированно

Пробую запускать http://kohana/welcome/ и получаю:

Not Found
The requested URL /welcome/ was not found on this server.

Если делаю http://kohana/index.php/welcome/ все работает.
Как избавиться от этого index.php в URL?
Автор: substrackto
Дата сообщения: 26.07.2011 00:27
Попробуй поправь последнюю строчку
Цитата:
RewriteRule (.*) /index.php/$0 [PT]


Если не пойдет закомменть
Цитата:
#RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]
и
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d


Автор: gidrosoldat
Дата сообщения: 26.07.2011 07:28
substrackto
не помог, ни первый вариант, ни второй.
Автор: gidrosoldat
Дата сообщения: 27.07.2011 20:46
По поводу моей проблемы с ЧПУ в Kohana. Методом тыка обнаружил, что не выполняется .htaccess. Добавил в httpd.conf AllowOverride All и Options FollowSymLinks - все заработало.
Автор: blacks2
Дата сообщения: 30.07.2011 16:09
Удалено.
Извините за беспокойство.
Автор: DmitrySU
Дата сообщения: 25.08.2011 18:00
Здравствуйте Уважаемые!
Помогите пожалуйста...
необходимо преобразование
http://site.ru/index.php?option=com_content&view=article&id=49&Itemid=57
в http://site.ru/content/view/49/57/

есть вот такая конструкция в .htaccess

RewriteEngine On

RewriteBase /

RewriteCond %{QUERY_STRING} ^option=com_content&view=article&id=([0-9]+)&Itemid=([0-9]+)$
RewriteRule ^index\.php?$ http://site.ru/content/view/%1/%2/? [L,R=301]

при обращении к http:/site.ru/index.php?option=com_content&view=article&id=49
в адресной строке выдает http://sitet.ru/content/view/49/57/, как хотелось, а содержимое главной страницы.... http://site.ru

Буду премного благодарен за помощь.
Автор: dacuan
Дата сообщения: 25.08.2011 18:34
DmitrySU
Боюсь, что из вашего описания трудно понять вашу задачу и проблему, с которой вы столкнулись.
Могу предположить, что необходимо перевести сайт со старой формы урлов на красивую новую. Но mod_rewrite этим не занимается. mod_rewrite позволяет сделать так, чтобы приложение видело старые урлы в то время, как пользователь использует новые. При этом придется вручную заменить во всех шаблонах все старые урлы на новые.
Автор: DmitrySU
Дата сообщения: 26.08.2011 02:51
dacuan

Цитата:
Если вы пишите форумы, сайт с новостями или любой сайт в котором есть конструкция 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 страничку.


Вот именно это я имел в виду.
Автор: dacuan
Дата сообщения: 26.08.2011 10:10
DmitrySU
Описание говорит о том,что с помощью mod_rewrite можно заменить адреса вида hттp://mybestsite.com/article.php?n=3&page=1 на hттp://mybestsite.com/articles/3/page1.htm, но в нем не сказано, что не потребуется ничего менять в шаблонах.
Автор: DmitrySU
Дата сообщения: 26.08.2011 10:56
dacuan
Но в нем сказано

Цитата:
С использованием mod_rewrite можно на лету преобразовывать адреса типа

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

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

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

Вот именно об этом разговор.
Если что-то нужно менять в шаблонах, что приведет к желаемому результату, ткните пожалуйста носом (только не сильно ), буду пытаться...
Просто точно такая же ситуация была на CMS Joostina, там обошлось правилами в htaccess. В моем случае, на Joomla - не помогает...
Автор: dacuan
Дата сообщения: 26.08.2011 13:39
DmitrySU
Ок, объясню на пальцах. Открываем перевод официальной документации, та, что в шапке обозначена как «Полная документация, но мне показалась сухой, мало полезных и главное наглядных примеров», и читаем о возможностях и особенностях работы mod_rewrite.

Если в двух словах, то mod_rewrite — это просто набор правил по преобразованию URL'ов. И с его помощью можно создать «виртуальные» страницы, которые красиво смотрятся, любят поисковики и т.д. И вот эти красивые URL mod_rewrite преобразовывает в физические адреса скриптов.

Т.е. на вход mod_rewrite получает «виртуальный» URL вида hттp://mybestsite.com/articles/3/page1.htm и преобразовывает его в реальный hттp://mybestsite.com/article.php?n=3&page=1.

Отсюда можно наметить план работ по переводу сайта на красивые URL:
1. Пишем правила mod_rewrite для преобразования виртуальных URL'ов в реальные.
2. Во всех шаблонах все ссылки на старые реальные URL'ы заменяем на новые красивые виртуальные.
Автор: DmitrySU
Дата сообщения: 26.08.2011 14:13
dacuan
Спасибо, будем искать пути решений...
Автор: Tstf
Дата сообщения: 03.09.2011 09:50
Суть такова. На некоторых хостингах работает следующая строка отлично, на некоторых - 500 ошибка.

Вот строка


Код: RewriteRule ^catalogue/search/([0-9]*)/([0-9]*)/([a-zA-Z_-]*)/([a-zA-Z_-]*)/~search=([^/]*)(/?)+$ index.php?do=catalogue&act=search&st=$1&page=$2&view=$3&show=$4&search_title=$5 [L]
Автор: Cheery
Дата сообщения: 03.09.2011 10:04
Tstf

Цитата:
Похоже проблема с символом "~"

лог ошибок посмотрите и узнаете с чем связана 500 ошибка.
Автор: Tstf
Дата сообщения: 03.09.2011 17:45
Cheery


Судя по записи в журнале ошибок:
"12606" [Sat Sep 3 17:27:26 2011] [alert] [client 91.189.112.7]
/www/onlypric/www/htdocs/.htaccess: RewriteRule: cannot compile regular
expression
'^goods/(.*)/([0-9]*)/([0-9]*)/([a-zA-Z_-]*)/([a-zA-Z_-]*)/DESC/?+$'\n

ошибка возникла в файле .htaccess в записи правил перенаправления.
Автор: winhex
Дата сообщения: 24.09.2011 22:17
Подскажите, сломал весь мозг. Есть домен site1.by, перенес с него инфу на site2.by/dir
поменял ДНС'ы, теперь site1 и site2 указывают на один хост. Нужно сделать так, чтобы при обращении на site1.by был редирект на site2.by/dir или site1.by/dir
Делал так:

Код:
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^site1\.by
RewriteRule ^(.*)$ http://site1.by/dir/$1 [R=permanent,L]
Автор: dacuan
Дата сообщения: 26.09.2011 12:23
winhex
Хорошо бы увидеть логи mod_rewrite. О том, как их получить написано в шапке.
Автор: RizaR
Дата сообщения: 09.10.2011 09:49
Добрый день!
Помогите немножко разобраться с регуляркой для htaccess

Цитата:

RewriteRule ^([a-zA-Z0-9_\-/]*)/?$ index.php?page=$1 [NC]

Старый вариант. Не работает на apache 1.3
Типа ему регулярное выражение не нравится.

Цитата:

RewriteRule: cannot compile regular expression '^([a-zA-Z0-9_\\-/]*)/?$'\n

Сейчас, чтобы я не экранировал, все равно не работает так как надо. Что не так?

Добавлено:
При:

Цитата:
RewriteRule ^([a-zA-Z0-9_\-\/]*)\/?$ index.php?page=$1 [NC]

Не находит страницу вообще
Автор: dacuan
Дата сообщения: 10.10.2011 13:34
RizaR
Стандартный первый совет:
Цитата:
Хорошо бы увидеть логи mod_rewrite. О том, как их получить написано в шапке.
Автор: Karpenkos
Дата сообщения: 22.10.2011 21:00
Кто может помочь переделать с:


Код: http://site/view.php?id=2
Автор: MyGoogle
Дата сообщения: 23.10.2011 14:56
Привет.

Возможно ли переделать
Код:


Код:


Код:
www.site.com/index.php?view=ad&search=keywordhere
Автор: Redduck9
Дата сообщения: 15.11.2011 11:58
Сделал такое правило

RewriteCond %{REQUEST_URI} articles/
RewriteRule ^articles/1/150(/*)$ articles/news/kasko-online/ [R=301,L]

То есть я хочу что бы со страниц articles/1/150 со слешом на конце или без, шел редирект на articles/news/kasko-online/ (Слеш на конце обязателен)
А идет редирект на articles/news/kasko-online (без слеша)???
Автор: pe4nuke
Дата сообщения: 06.01.2012 13:47
Скажите, как сделать реврайт
/?q=Doctor%20House
на /?q=Doctor-House
Автор: Cheery
Дата сообщения: 06.01.2012 20:14
pe4nuke
а не проще это сделать прямо в скрипте?
c помощью mod_rewrite можно, но чуть сложнее, чем если самим скриптом
Автор: Redduck9
Дата сообщения: 07.01.2012 11:35
pe4nuke

RewriteCond %{QUERY_STRING} ?q=Doctor%20House
RewriteRule (.*) ?q=Doctor-House [L,QSA]

Возможно вот так сработает правило, попробуйте.
Автор: Nagolder
Дата сообщения: 07.01.2012 11:43

Цитата:
Возможно вот так сработает правило, попробуйте.

Да так-то сработает однозначно Но если вместо House будет Ajbolit, надо писать еще одну регулярку, потом еще одну и т.д., пока .htaccess не лопнет...
Насколько я понимаю, вопрос был в общем, о замене пробела %20 на тире. Если так, то здесь лучше послушать Cheery, скриптом сделать намного проще.

А вот если на самом деле всего один вариант, жестко прописанный с Doctor%20House - ну тогда можно и в .htaccess прописать однозначно.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445

Предыдущая тема: PHP: Регулярные выражения (RegExp, Regular, eregi, preg)


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