Поиск:

Ответ в темуСоздание новой темы Создание опроса
> FAQ. Apache. mod_rewrite. Начни с простого. Было много вопросов. Написал статейку. 
:(
    Опции темы
Mal Hack
Дата 21.5.2005, 21:09 (ссылка) |    (голосов:6) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



Данный модуль веб-сервера Apache предназначен для преобразования исходных URL'ов. Его возможности - колоссальны, но зачастую он используется для создания ЧПУ (Человеко Понятный УРЛ). Что это значит. Вместо http://example.com/index.phtml?year=2005&m...y=31&news=theme использовать http://example.com/2005/12/31/theme.html. Такой механизм очень часто применяется на новостных сайтах. В тоже время это плюс для безопасности. Пользователи не видят к какому файлу (скрипту) реально идет обращение.

Ниже рассмотрим несколько вопросов:
1. Как включить mod_rewrite на Apache?
2. Немножко теории. Как работает mod_rewrite.
3. Простой пример.
4. Что надо сделат в скрите?
5. Что дает данный подход и mod_rewrite в целом?
6. Возможные ошибки.
7. Альма-Матер дл изучения mod_rewrite

1. Как включить mod_rewrite на Apache?

Для включения mod_rewrite на веб-сервере Apache необходимо отредактировать файл httpd.conf.
Для этого открываем файл httpd.conf, ищем строчку:
Код
#LoadModule rewrite_module modules/mod_rewrite.so

И убираем комментарий
Код
LoadModule rewrite_module modules/mod_rewrite.so

После чего перезапускаем веб-сервер.

2. Немножко теории. Как работает mod_rewrite.

Как правило, только что столкнувшиеся с mod_rewrite, программисты не понимают до конца как работает данный механизм. Из-за этого долгое время ломают голову над «детскими ошибами.

Итак. Как мы знаем есть, так называемый GET запрос, т.е. http://example.com/2005/12/31/theme.html, который «приходит» на веб-сервер (в нашем примере - Apache). Что делает сервер. Первым делом он смотрит настройки данного хоста. После чего уже принимает решение, что делать дальше. Либо отправить пользователю обратно содержимое заглавной странцы (index.html, к примеру) или отправить на интерпретацию код заглавного скрипта index.php или вернуть ошибку 404 и т.д. и т.п.. Предположим, что у нас дальше пойдет работа с index.phtml. Что будет дальше вы уже наверняка знаете. Мы же остановимся на том моменте, когда сервер смотрит настройки хоста. Их может быть большое множество. Но в обязательном порядке сервер пытается найти в корне файл .htaccess. (файл конфигурации Apache «на лету»). Вот именно в этом файле находятся правила преобразования mod_rewrite (они могут находиться и в httpd.conf). Т.е. я все веду к тому, что преобразование URL’ов ведется ДО работы скриптов.

Алгоритм следующий:
1. Сервер получает GET запрос: http://example.com/2005/12/31/theme.html
2. Находит в .htaccess правила преобразования mod_rewrite.
3. Преобразовывает.
4. Перенаправляет на index.phtml согласно правилам преобразования.
5. Скрипт начинает работать.

3. Простой пример.

Многие из вас видели такую вещь: http://example.com/2005/12/31/theme.html . Такие адреса часто используют новостные сайты. Естественно у них нет всех этих папок и html файлов. Все данные обрабатывает скрипт. Ниже мы рассмотрим один из вариантов такого преобразования. Скажу сразу. Вариантов уйма я лишь беру один частный случай, которым сам пользуюсь и считаю его наиболее универсальным.
Код
 RewriteEngine on
Options +FollowSymlinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.phtml [L,QSA] 

Рассмотрим все по порядку.
Два подряд RewriteCond это условия, между которыми стоит И.
Т.е. Если запрашиваемый адрес не является реально существуемым файлом или каталогом перекидываем на index.phtml. Т.е. таким образом мы реализовали то, что у нас запросы http://example.com/2005/12/31/theme.html будут обрабатываться скриптом index.phtml. Теперь весь вопрос, как нам узнать в скрипте что пользователь запрашивает /2005/12/31/theme.html.

Тут лирическое отклонение. Несколько слов о RewrtiterRule. Директива рассматривает параметра. Первый (в нашем случае: ^(.*)$) – строка регулярного выражения, которая проверяет, удовлетворяет ли запрашиваемый адрес (в нашем случае: /2005/12/31/theme.html) паттерну (в нашем случае да, т.к. паттерн гласит: «любой символ 0 и более раз» от начала и до конца строки - ^(.*)$). В случае удовлетворения паттерну, mod_rewrite перенаправляет запрос на файл, указанный во втором параметре (в нашем случае: index.phtml).

Теперь весь вопрос в том, как скрипт узнает о «/2005/12/31/theme.html». Есть два варианта.
Первый:
Код
RewriteRule ^(.*)$ index.phtml?$1 [L]
, где «/2005/12/31/theme.html» будет передано скрипту index.phtml в переменную QUERY_STRING, т.к. $1 – первые круглые скобки в паттерне, что будет равносильно: http://example.com/?/2005/12/31/theme.html. Но, вы где-ть такое видели? Нет. Поэтму, мы используем в качестве ключа QSA.

Есть переменная сервера (к которым скрипты имеют доступ) REQUEST_URI в котором всегда содержится GET запрос («/2005/12/31/theme.html»). Итак, если мы перенаправляем на index.phtml, то REQUEST_URI должен получить значение index.phtml, НО ключ QSA заменяет его НА «/2005/12/31/theme.html». Т.е. мы физически перенаправляем на index.phtml, а логически показываем скрипту, что пользователь обращался к «/2005/12/31/theme.html».

4. Делаем скрипт

Теперь мы уже работаем с index.phtml, скриптом, на который мы произвели перенаправление. Говорю сразу, код на PHP, т.к. другими языками под веб владею плохо.
Код
<?php 
$arr = explode( '/' , $_SERVER['REQUEST_URI'] );
// Разбиваем переменную $_SERVER['REQUEST_URI'] на массив элементов по символу '/'.
print $arr[1] . '<br>';
print $arr[2] . '<br>';
print $arr[3] . '<br>';
print $arr[4] . '<br>';
?>


Вот так все просто. Теперь вы можете оперировать с данным массивом. Дабы было еще понятне. Приведу аналогию. Предположим такой адрес: http://example.com/index.phtml?year=2005&m...y=31&news=theme. Как мы знаем, что в скрипте данные параметры будут доступны через массив $_GET.
так вот, $_GET[‘year’] то же, что и $arr[1], $_GET[‘month’] то же, что и $arr[2], $_GET[‘day’] то же, что и $arr[3], $_GET[‘theme’] то же, что и $arr[4] (только надо будет еще отрезать «.html»).

5. Что дает данный подход и mod_rewrite в целом?

Во-первых для поисковых систем намного приятнее URL вида: http://example.com/?/2005/12/31/theme.html, нежели http://example.com/index.phtml?year=2005&m...y=31&news=theme, да и для пользователей, согласитесь тоже.

Второй момент. При mod_rewrite практически на «нет» сводится возможность XSS нападения, т.к. include-баг практически перекрывается. На данном примере это не так видно, но поверьте на слово, это так. НО в любом случае все зависит от вашей головы !!!

Третий момент, это скрытие реально используемой технологии. отчасти это усложняет взлом сайта, но это лишь верхнаяя граница, как тина на застоявшемся пруду.

6. Возможные ошибки

Как правило могут возникуть следующие ошибки:

404 – документ не найден. Причина: правила RewriteRule не срабатывают.
403 – Forbidden – доступ запрещен. Правила реврайта содержат логическую ошибку, которая возникает из-за попытки редиректа на файл, куда нет доступа (/index.php – выдаст именно это, т.к. / в UNIX системах означает путь от корневого каталога СЕРВЕРА, куда само собой у вас доступа не будет).
500 – Internal Server Error. Причина в синтаксическо ошибке в файле .htaccess.

7. Альма-Матер дл изучения mod_rewrite

Лично мне эта статья очень помогла. Вот ее аннотация, а ниже я прикрепляю ZIP файл. В нем - эта статья в RTF формате,

Цитата
«Главное преимущество даваемое Вам mod_rewrite — это возможности конфигурирования и гибкость присущие Sendmail. Обратная сторона mod_rewrite — это возможности конфигурирования и гибкость присущие Sendmail».

-- Brian Behlendorf

Apache Group
«Несмотря на тонны примеров и документацию, mod_rewrite это Вуду. Чертовски клёвый Вуду, но все-таки Вуду.»

-- Brian Moore
[email protected]

Добро пожаловать в мир mod_rewrite, швейцарский нож URL преобразований!
Этот модуль использует механизм основанный на правилах (синтаксический анализатор основанный на регулярных выражениях) для преобразований URL на лету. Он поддерживает неограниченное количество правил и неограниченное количество связанных с правилом условий для реализации действительно гибкого и мощного механизма для URL преобразований. URL преобразования могут зависеть от разных критериев, например переменных сервера, переменных окружения, HTTP заголовков, времени и даже запросы к внешним базам данных в разных форматах, могут быть использованы для достижения действительно точного соответствия вашим ожиданиям, преобразованных URL.

Этот модуль оперирует с полными URL (включая path-info) и в контексте сервера (httpd.conf) и в контексте каталога (.htaccess) и даже может генерировать части строки запроса в качестве результата. Преобразованный результат может приводить к внутренней обработке, внешнему перенаправлению запроса или даже к прохождению через внутренний прокси модуль.

Однако вся эта функциональность и гибкость имеет свой недостаток: сложность. Поэтому не ожидайте что вы поймете весь этот модуль за один день.
Этот модуль был придуман и написан в апреле 1996 и эксклюзивно подарен The Apache Group в июле 1997 

Ralf S. Engelschall
[email protected]
www.engelschall.com


Это сообщение отредактировал(а) Mal Hack - 21.5.2005, 22:03

Присоединённый файл ( Кол-во скачиваний: 1553 )
Присоединённый файл  mod_rewrite.zip
PM ICQ   Вверх
Wowa
Дата 22.5.2005, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: 2
Всего: 290



PM WWW   Вверх
Гость_123
Дата 2.6.2005, 18:35 (ссылка)    |    (голосов: 1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Zdrastvuyte pomogite pozhalusta smile

imyu vot eto----

http://localhost/practicas/noticias/detalle.php?id=2


hochu chtob bilo vot eto---


http://localhost/practicas/noticias/detalle.php/id=2


delauy po raznomu i nichego smile

1- RewriteEngine on
2-RewriteRule ^/(.+)/dn_pg=(.+) /cgi-bin/detalle.cgi?id=$1&name=$2 [T=application/x-httpd-cgi,L] (ne znayu chto na chto nado pravilyno zamenit')
ili vot eto
RewriteRule ^(.*)shop/(.*)$ $1detalle.php/
RewriteRule ^robots.txt$ /text.cgi?%{REQUEST_URI}

Spasibo smile

  Вверх
Mal Hack
Дата 2.6.2005, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



Ваши преобразования мне не понятны в корне.
Это
RewriteRule ^(.+)/(.+)=(.+?)$ $1?$2=$3
Цитата
imyu vot eto----

http://localhost/practicas/noticias/detalle.php?id=2


hochu chtob bilo vot eto---


http://localhost/practicas/noticias/detalle.php/id=2


PM ICQ   Вверх
Гость_123
Дата 2.6.2005, 19:23 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











ya hochu chtob sayt ne imel znaka voprosa(chtob ne bilo etogo detalle.php?id=2
a bilo vot eto detalle.php/2
  Вверх
Mal Hack
Дата 2.6.2005, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



Код
RewriteRule ^(.+)/(.+)=(.+?)$ $1?$2=$3

При запросе
http://localhost/practicas/noticias/detalle.php/id=2
будет перенаправление на уровне сервера на
http://localhost/practicas/noticias/detalle.php?id=2

ЗЫ: Зарегистрируйтесь на форуме это даст вам много преимуществ smile

PM ICQ   Вверх
Гость_123
Дата 2.6.2005, 19:35 (ссылка)    |    (голосов: 2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











u menya schas net vremeni registrirovatsya i ya ne ponimayu chto ti mne za kod pishesh
  Вверх
Гость_123
Дата 2.6.2005, 19:35 (ссылка)    |    (голосов: 1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











smile
  Вверх
Mal Hack
Дата 2.6.2005, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



Я тебе написал правило преобразования mod_rewrite под то, что ты сказал.
PM ICQ   Вверх
Гость_123
Дата 2.6.2005, 19:39 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











RewriteEngine on

Options FollowSymLinks

RewriteRule /tut nado napisat' to chto budet mne menya etot nekrawiviy adres http://localhost/practicas/noticias/detalle.php?id=2
na etot krasiviy
http://localhost/practicas/noticias/detalle.php/2 (chtob ya pisala .... detalle.php/2 i mne vidavalis' dannie ot syuda http://localhost/practicas/noticias/detalle.php?id=2

na drugom kompyuteri vrode kak deystvuet eto

RewriteEngine on
Options FollowSymLinks
RewriteRule /articulo/(.+) /detalle.php?id=$2
RewriteRule ^forums/(.+) detalle.php?id=$2

no u menya net smile
  Вверх
Гость_123
Дата 2.6.2005, 19:41 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











ti hochesh skazat' chto ya napishu vot eto

RewriteEngine on
Options FollowSymLinks
RewriteRule ^(.+)/(.+)=(.+?)$ $1?$2=$3 i u menya vse budet funkcionirovat'? (ne pravda)
mi nigde dazhe ne ukazivaem kak nazivaetsya fail kotoriy ya hochu chtob mne pokazal smile smile smile
  Вверх
Гость_123
Дата 2.6.2005, 19:43 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











a mozhet nado po raznomu pisat' dlya apache 1 i dlya apache2?

potomu chto tot primer kotoriy ya govorila chto robotaet tak dlya apache1,a u menya apache 2 i ne robotaet ono smile smile
  Вверх
Mal Hack
Дата 2.6.2005, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



Пиши на русском пожалуйста.
К тебе на хост идет запрос:
http://localhost/practicas/noticias/detalle.php/2
После правила RewriteRule ^(.+)/(.+)$ $1?id=$2 т.к. в $1 будет http://localhost/practicas/noticias/detalle.php, затем ? затем id=, затем $2, т.е. 2.

PM ICQ   Вверх
Гость_123
Дата 2.6.2005, 20:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Ogromnoe spasibo smile smile

P.S. kirilicey pisat' ne umeyu (pochti ne umeyu)
  Вверх
Gorcer
Дата 21.12.2005, 05:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 275
Регистрация: 30.6.2004
Где: Владивосток

Репутация: нет
Всего: 4



здраствуйте, у меня в модреврайте все папки жестко прописаны, и если папка не существует то всё переправляется на main.php, но мне хочется сделать папку downloads в которой будут лежать другие папки и файлы....и чтоб modrewrite то что там будет вабще никак не трогал.
как это сделать?


--------------------
Больнее всего получить удар от человека которому доверяешь.

<удалено администрацией>
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 21.12.2005, 16:17 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



Сделай в самом начале всех преобразований преобразование так сказать заглушку, тюею
RewriteRule downloads(.*?) downloads$1 [L]
PM ICQ   Вверх
Gorcer
Дата 29.12.2005, 04:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 275
Регистрация: 30.6.2004
Где: Владивосток

Репутация: нет
Всего: 4



Уважаемый, я наверное чтото нетак делаю:
вот мой кривой код:

Код

Options FollowSymLinks
RewriteEngine On
RewriteBase /

RewriteRule downloads(.*?) downloads$1 [L] #-----вставил это и перестало всё работать!:-(

# css /css/
RewriteRule ^css/(.*)$ - [L]
RewriteRule ^/css/(.*)$ - [L]

# css /inc/
RewriteRule ^style.css$ - [L]
RewriteRule ^java.js$ - [L]
RewriteRule ^ubbc.js$ - [L]
RewriteRule ^translit_only.js$ - [L]

RewriteRule ^(.*)style.css$ /style.css [L]
RewriteRule ^(.*)java.js$ /java.js [L]

RewriteRule ^(.*)ubbc.js$ /ubbc.js [L]
RewriteRule ^(.*)translit_only.js$ /translit_only.js [L]

# pictures /pict/
RewriteRule ^pict/(.*)$ - [L]
RewriteRule ^/pict/(.*)$ - [L]
RewriteRule ^(.*)pict(.*)$ /main.php [L]
RewriteRule ^(.*)getimage.php(.*)$ - [L]

RewriteRule ^downloads/(.*)$ - [L]
RewriteRule ^/downloads/(.*)$ - [L]
RewriteRule ^(.*)downloads(.*)$ /main.php [L]

RewriteRule ^(.*)tovar.php(.*)$ - [L]


RewriteRule ^(.*)login.php(.*)$ - [L]
RewriteRule ^logout.php(.*)$ - [L]
RewriteRule ^(.*)logout.php(.*)$ /logout.php [L]

# all another - missing.php
RewriteRule ^main.php$ - [L]
RewriteRule ^(.*)$ /main.php [L]




--------------------
Больнее всего получить удар от человека которому доверяешь.

<удалено администрацией>
PM MAIL WWW ICQ Skype   Вверх
Gorcer
Дата 29.12.2005, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 275
Регистрация: 30.6.2004
Где: Владивосток

Репутация: нет
Всего: 4



Разобрался...тут вопросики ненужны, надо вот так -

RewriteRule downloads(.*) downloads$1 [L]

только проблема появилась, при обращении к папке www.mysait/downloads вылетает ошибка, всё таже error 500 - internal server error, тогда как www.mysait/downloads/index.html работает исправно!

сервер пишет:
[Thu Dec 29 15:34:18 2005] [error] [client 212.xxx.xxx.xxx] File does not exist: /home/designvl/public_html/lico/500.shtml

[Thu Dec 29 15:31:52 2005] [error] [client 212.xxx.xxx.xxx] File does not exist: /home/designvl/public_html/lico/404.shtml

Это сообщение отредактировал(а) Gorcer - 29.12.2005, 09:10


--------------------
Больнее всего получить удар от человека которому доверяешь.

<удалено администрацией>
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 29.12.2005, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



Потому что при просто downloads $1 - пуста... Из-за этого может быть или не в этом правиле косяк.
PM ICQ   Вверх
Gorcer
Дата 30.12.2005, 02:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 275
Регистрация: 30.6.2004
Где: Владивосток

Репутация: нет
Всего: 4



В этом в этом!
Так как написать надо, чтобы и заглушка была и что при пустой редиректился на index.html?


--------------------
Больнее всего получить удар от человека которому доверяешь.

<удалено администрацией>
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 30.12.2005, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



RewriteRule downloads$ downloads [L]
RewriteRule downloads(.*) downloads$1 [L]

или
RewriteRule downloads(.*?) downloads$1 [L]

PM ICQ   Вверх
Guest
Дата 2.1.2006, 03:08 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











ну вот это
RewriteRule downloads(.*?) downloads$1 [L]

выдаёт ошибку в лог:
RewriteRule: cannot compile regular expression 'downloads(.*?)'\n

а
RewriteRule downloads$ downloads [L]
RewriteRule downloads(.*) downloads$1 [L]

не даёт ожидаемого результатаsmile((((((((((
  Вверх
Guest
Дата 2.1.2006, 03:13 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











ну вот это
RewriteRule downloads(.*?) downloads$1 [L]

выдаёт ошибку в лог:
RewriteRule: cannot compile regular expression 'downloads(.*?)'\n

а
RewriteRule downloads$ downloads [L]
RewriteRule downloads(.*) downloads$1 [L]

не даёт ожидаемого результатаsmile((((((((((

RewriteRule ^downloads- [L]
RewriteRule ^/downloads- [L]
RewriteRule downloads$ downloads[L]
RewriteRule downloads(.*) downloads$1 [L]
  Вверх
Mal Hack
Дата 2.1.2006, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



Значит просто убирай
Цитата(Guest @ 2.1.2006, 03:13)
RewriteRule downloads$ downloads [L]

Оставляя:
RewriteRule downloads(.+); downloads$1 [L]
PM ICQ   Вверх
Xeim
Дата 29.3.2006, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 17.11.2005

Репутация: нет
Всего: 0



Помогите пожалуйста мне решить следущую задачу.

Есть домен http://домен.net там залит IPB1.3 с установленным модом Multiforums, что позваляет делать неограниченное колличество форумов с адресом вида: http://домен.net/?mforum=ИМЯ. Так вот задача преобразовывать этот вид в http://ИМЯ.домен.net

Т.е. нужно все автоматизировать чтобы об адресе http://домен.net/?mforum=ИМЯ никто даже и не думал, чтобы он нигде не встречался юзерам, чтобы можно было сказать, что используется адрес http://ИМЯ.домен.net

Это как я понимаю делается с помощью нашего любимого mod_rewrite. Только вот не могу понять как.

Спасибо! smile

Это сообщение отредактировал(а) Xeim - 29.3.2006, 22:09
PM MAIL   Вверх
B2_Russia
Дата 30.3.2006, 00:33 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


В доску свой :)
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 3.7.2003
Где: Тверь

Репутация: нет
Всего: 1



Вот не панацея, но с некоторыми модификациями можно использовать
Писал давно, изменения в разборах линков, советую более строгие правила
Код


############################################################################################
#
# Файл .htaccess написан в помощь web-разработчикам-новичкам  таким же новичком  
# для создания ЧПУ (человеко-понятных урлов), готов к применению

# При написании были использованы:
# Apache HTTP Server Documentation Project: http://httpd.apache.org/docs-project/
# Материалы сайта: http://phpclub.ru
#
# Автор файла: Зверев Валентин (DpoHro)
# На связи: zverev[тра-ля-ля]cps.tver.ru
#
############################################################################################


############################################################################################
#
# Переадресация обработки ошибки
# Директива ErrorDocument служит для указания серверу сценария обработки ошибок
# Формат: ErrorDocument <код ошибки> <путь к скрипту-обработчику>
#
############################################################################################

ErrorDocument 404 /errors/error404.html
#ErrorDocument <code> /errors/error<code>.html

############################################################################################
#
# Врубаем движок перезаписи
# Перезапись производится следующим образом:
# На каждый модуль - отдельная виртуальная папка
# Виртуальная папка создается путем создания правила для определенных URL, например,
# хотим создать папку /user/ тогда пишем правило:
#
# RewriteRule ^user[/](.*)[/](.*).html[/]$ ./index.php?module=user&param=$1&page=$2 [QSA]
# RewriteRule ^user[/](.*).html[/]$ ./index.php?module=user&page=$1 [QSA]

# Здесь первая строка указывает что адреса вида 
# http://www.domain.ru/user/somedir/somefile.html
# http://www.domain.ru/user/somedir/
# будут переписаны как
# http://www.domain.ru/index.php?modu...p;page=somefile
# http://www.domain.ru/index.php?modu...p;page=somefile
#
# Далее один уровень - подкаталогов
# Далее файл с расширением .html
# Вид урла: http://www.domain.ru/module/somefilder/somefile.html
#
############################################################################################

#<IfModule mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On

############################################################################################
#
# Директива RewriteBase указывает физический путь относительно которого будут располагаться
# перезаписываемые страницы. 
#
############################################################################################

RewriteBase /


############################################################################################
#
# Запрещаем доступ к файлам .htaccess и директориям
# Как работает RewriteRule
# Формат: RewriteRule <разбор входящей (перезаписываемой) строки> <составление новой (записываемой) строки>
# Разбор вх. строки производится при помощи спец. символов:

# Текст:
# . - один символ (в данном месте стоит какой-либо символ)
# [chars] - один из символов (в данном месте стоит один из перечисленных символов)
# [^chars] - ни один из символов (в данном месте не стоит ни одного из перечисленных символов)
# text1|text2 - Либо text1, либо text2

# Повторители:
# ? - 0 или 1 раз повторяетсяпредшествующий текст
# * - 0 или N раз повторяетсяпредшествующий текст
# 1 - 0 или N раз повторяетсяпредшествующий текст

# Якори:
# ^ - Начало разбираемой строки
# $ - Конец разбираемой строки

# Экранирование:
# \char - Возможно такое, что служебные символы будут присутствовать в перезаписываемом тексте
# и чтобы возможно было разобрать подобное выражение нужно будет указать, чтобы они не принимались
# за служебные, это производится установкой перед ними обратного слеша (экранирование)
# Например: ^/\((.*)\)/$ будет проинтерпретирован как строка запроса /(sometext)/ и из нее
# в переменную $1 будет помещен текст sometext

############################################################################################

RewriteRule ^.htaccess - [F] # незачем знать, что написано в этом самом файле хотя он вроде по умолчанию недоступен
RewriteRule ^admin - [F] # нех лазить по физической директории CMS
RewriteRule ^settings.php - [F] # нех лазить по файлу с настройками

############################################################################################
#
# разрешаем доступ к существующим файлам и директориям (если это требуется)
# Директива RewriteCond. Это своего рода условный оператор

# Формат: RewriteCond %{NAME_OF_VARIABLE} ^formated-string*

# NAME_OF_VARIABLE - это предопределенные переменные перечисленные ниже

# HTTP-заголовки:

# HTTP_USER_AGENT
# HTTP_REFERER
# HTTP_COOKIE
# HTTP_FORWARDED
# HTTP_HOST
# HTTP_PROXY_CONNECTION
# HTTP_ACCEPT

# Коннекты и запросы: 

# REMOTE_ADDR
# REMOTE_HOST
# REMOTE_USER
# REMOTE_IDENT
# REQUEST_METHOD
# SCRIPT_FILENAME
# PATH_INFO
# QUERY_STRING
# AUTH_TYPE

# Внутренние переменные сервера:

# DOCUMENT_ROOT
# SERVER_ADMIN
# SERVER_NAME
# SERVER_ADDR
# SERVER_PORT
# SERVER_PROTOCOL
# SERVER_SOFTWARE

# Системные переменные:

# TIME_YEAR
# TIME_MON
# TIME_DAY
# TIME_HOUR
# TIME_MIN
# TIME_SEC
# TIME_WDAY
# TIME

# Специальные:

# API_VERSION
# THE_REQUEST
# REQUEST_URI
# REQUEST_FILENAME
# IS_SUBREQ

# Пример:
# RewriteCond %{REMOTE_HOST} ^host1.* [OR,NC]
# RewriteCond %{REMOTE_HOST} ^host2.* [OR,NC]
# RewriteCond %{REMOTE_HOST} ^host3.* [NC]
# RewriteRule ^/$ - [F]
# Запрещаем вход на сайт с хостов host1,host2,host3

# Есть два полезных флага [OR] означает чтото типа "или следующее условие"
# это если их два или более подряд идущих и выполняться должно хотябы одно из них,
# и флажок [NC] - назначение "не учитывать регистр"

# Насамом деле RewriteCond я бы использовал для того, чтобы ограничивать/расширять доступ
# юзерам/агентам, в зависимости от параметров содержащихся в переменных, которые они 
# приносят вместе с собой 
# То есть, роботов и гостей с опредеделенных IP , например, блокируем, Другие гостям с опять же
# определенных адресов обрабатываем одним скриптом, оставшихся по умолчанию

############################################################################################

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

############################################################################################
#
# добавляем слеш в конце пути. Это необходимо для того, чтобы ссылки вида:
#
# http://www.domain.ru/news
# и
# http://www.domain.ru/news/

# обрабатывались одинаково


RewriteRule ^(.+[^/])$ $1/ [QSA]

############################################################################################
#
# обработка директории ошибки
# один скрипт на обработку всех ошибок, в нем можно ставить редиректы, чтобы пользователю
# не выдавались пресловутые надписи о невозможности чего-либо при помощи вашего сайта,
# а предлагалось бы найти информацию воспользовавшись поиском
#

RewriteRule ^errors/error(.*).html[/]$ ./errors/error.php?code=$1 [QSA]


############################################################################################
#
# обработка директории модуля USER 
#

RewriteRule ^user[/](.*)[/](.*).html[/]$ ./index.php?module=user&param=$1&page=$2 [QSA]
RewriteRule ^user[/](.*).html[/]$ ./index.php?module=user&page=$1 [QSA]

############################################################################################
#
# обработка директории модуля ADMINISTRATOR
# папка Content Management System (CMS) расположена произвольно, адрес доступа 
# http://www.domain.ru/administrator/index.php


RewriteRule ^administrator[/]index.php[/]$ ./admin/index.php [QSA]

############################################################################################
#
# обработка корневой директории. так как это последнее правило, то тут необходимо исключить
# возможное включение слешей в пути к странице, другими словами, чтобы было невозможно обработать
# путь вида http://www.domain.ru/somedir/somedir/file.html, если не найдена ни одна из выше 
# обрабатываемых директорий, делаем это исключением из пути слешей записью [^/]


RewriteRule ^([^/]+).html[/]$ ./index.php?page=$1 [QSA]

#</IfModule>

############################################################################################

# Теперь как все должно быть в коде...
# Смысл этого всего в том, чтобы будь то поисковик будь то реальный пользователь не видел
# охрененных URLов типа http://www.domain.ru/index.php?m=ne...11&id=12345
# и при этом, трудно воспроизводимых.

# Следовательно, при использовании mod_rewrite ваш скрипт должен генерить ссылки вида:
# http://www.domain.ru/news/14112005/hotnews.html
# а принимать ссылку вида
# http://www.domain.ru/index.php?modu...ategory=hotnews
# Ну или такую ссылку которую вы задумаете и опишите в этом файле

# Так что структура сайта должна быть основательно продумана заранее, затем должен быть
# написан сейфайл как надо, а уж после приступайте к коду

# Удачи! Мыльте на: zverev[тра-ля-ля]cps.tver.ru
# Может кто поправит/дополнит и сподобимся вместе написать более подробную весчь

PM WWW ICQ   Вверх
Xeim
Дата 30.3.2006, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 17.11.2005

Репутация: нет
Всего: 0



B2_Russia, Спасибо! Но мне бы хотелось бы все таки домены вида http://www.user.domain.ru/ , а не http://www.domain.ru/user/

Пожалуйста подскажите! smile
PM MAIL   Вверх
B2_Russia
Дата 30.3.2006, 01:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В доску свой :)
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 3.7.2003
Где: Тверь

Репутация: нет
Всего: 1



Моя думать, что при помощи htaccess так не сделать smile
PM WWW ICQ   Вверх
Xeim
Дата 30.3.2006, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 17.11.2005

Репутация: нет
Всего: 0



Цитата(B2_Russia @ 30.3.2006, 01:55)
Моя думать, что при помощи htaccess так не сделать smile

Жуть! А как тогда сделать? С помощью чего?

Я надеюсь, что ты ошибочно думаешь. smile

Это сообщение отредактировал(а) Xeim - 30.3.2006, 13:36
PM MAIL   Вверх
Mal Hack
Дата 30.3.2006, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



Через DNS и директивы ServerAlias эт делается. Скриптом анализируется HTTP_HOST или реврайтом.
PM ICQ   Вверх
B2_Russia
Дата 30.3.2006, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В доску свой :)
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 3.7.2003
Где: Тверь

Репутация: нет
Всего: 1



Да без DNS - строга никак!
PM WWW ICQ   Вверх
Winter
Дата 22.5.2006, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 22.5.2006

Репутация: нет
Всего: нет



Скажите пожалуйста, а как можно проверить, что RewriteEngine в htaccess работает, есть какой-то код, который везде должен работать, например:

Код

RewriteEngine on    
Options +FollowSymlinks    

RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f    
RewriteCond %{REQUEST_FILENAME} !-d    
RewriteRule ^(.*)$ index.php [L,QSA] 


гарантированно отошлет в  index.php всё, что после index.php.

А то может в httpdocs админ запретил FollowSymlinks или вообще Engine отключен. 
PM MAIL   Вверх
Mal Hack
Дата 22.5.2006, 23:07 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



Winter, если правила не срабатывают, то значит надо админу ставить пузырь. 
PM ICQ   Вверх
Winter
Дата 23.5.2006, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 22.5.2006

Репутация: нет
Всего: нет



К сожалению, иногда админ сидит очень далеко.

Но в моём случае админ говорит, что всё должно работать.

Было вот как: перетащили сайт, на котором использовались ЧПУ на другой сервак, притом никаких файлов .htaccess обнаружено не было, в основном конфиге старого сервака тоже ничего интересного (если верить админу).

На новом серваке ессно ничего не работало, т.к. ну никак не отработает index.php по ссылке
domen.com/index.php/news/12/11/2006, без rewrite.
Притом, что в index.php явно разбирается $_SERVER['REQUEST_URI'].
Я попытался наваять .htaccess (примерно такой, как вы советовали), и ничего не заработало.
Админ опять же сказал, что всё настроено для rewrite.
Как это можно проверить?

 
PM MAIL   Вверх
Wowa
Дата 23.5.2006, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: 2
Всего: 290



Цитата(Winter @  23.5.2006,  10:15 Найти цитируемый пост)
Я попытался наваять .htaccess (примерно такой, как вы советовали), и ничего не заработало.
Админ опять же сказал, что всё настроено для rewrite.

Надо бы значит error_log посмотреть, тогда поймешь почему инструкции из .htaccess не выполняются. 
PM WWW   Вверх
Winter
Дата 24.5.2006, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 22.5.2006

Репутация: нет
Всего: нет



В error_log всегда попадают сообщения, если я что-то не так в .htaccess написал?
Вобщем уже поздно, заказчик распорядился сайт обратно перенесть  smile  
PM MAIL   Вверх
coyl
Дата 13.6.2006, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 13.6.2006

Репутация: нет
Всего: 1



А у меня возникла следующая проблема:
в скрипт передается один параметр, который надо разбить на несколько по разделителю, НО. Частей может быть неограниченное количество
То есть может быть такой запрос:
www.mysite.com/script.php?param=a|b|df|c|e
и сколько будет частей - непонятно.
а хочу я пребразовать в такой вид
www.mysite.com/script/a/b/df/c/e

Как написать рул для преобразования, учитывая, что частей, разделённых знаком "|" может быть сколько угодноsmile 

Заранее благодарен smile  
PM MAIL   Вверх
Mal Hack
Дата 13.6.2006, 18:39 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



RewriteRule (([A-Za-z0-9]+/)*)/? index.php?param=$1 
PM ICQ   Вверх
coyl
Дата 13.6.2006, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 13.6.2006

Репутация: нет
Всего: 1



Благодарю, но это не совсем то, что мне нужно. помимо простой подстановки, мне еще надо заменить символ "/" на символ "|"
Код

RewriteRule (([A-Za-z0-9]+/)*)/? index.php?param=$1 

Этот рул просто просто сделает из 
www.mysite.com/script/a/b/df/c/e
в
www.mysite.com/script.php?param=a/b/df/c/e
а мне надо в
www.mysite.com/script.php?param=a|b|df|c|e 
PM MAIL   Вверх
Mal Hack
Дата 13.6.2006, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



А почему не c разделителем + или = ???
Динамически так сделать скорее всего не получится... 
PM ICQ   Вверх
coyl
Дата 13.6.2006, 20:13 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 13.6.2006

Репутация: нет
Всего: 1



Дело в том, что имею дело с написанным (очень криво) до меня движком. там параметры передаются именно так. пока переписываю надо сделать нормальные урлы ( скорее для работодателя, чем для пользы дела =). Так что разделитель именно такой и это не изменить. 
PM MAIL   Вверх
Mal Hack
Дата 13.6.2006, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



mod_rewrite думаю такое не сделает. Есть вариант что через другой скрипт, получив этот URL, пропарсить его и сделать редирект на нужный, с нужным форматированием стоки параметров. 
PM ICQ   Вверх
svalerik
Дата 27.8.2006, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 27.8.2006

Репутация: нет
Всего: нет



Всем день добрый. Возникла такая задачка есть домен http://www.mydomen.ru на нем сайт с движком на php. Также сейчас есть поддомены вида http://pod1.mydomen.ruhttp://pod2.mydomen.ruhttp://pod3.mydomen.ru сейчас  на каждом из них стоит копия сайта, почти целиком одинаковая. Возможно поддоменов скоро будет порядка 15, и править код на каждом - это с ума сойти, так вот в чем собственно вопрос, возможно ли сделать переадресацию на домен, но так что бы адрес в строке остался с поддомена, разумеется код будет формиравить ссылки с учетом того с какого поддомена пришли. т.е. что бы движок был один для всего, и еще вопрос с точки зрения глючности, тормознутости - все же какой вариант предпочтительнее ?? поддомен - отдельный сайт, или через перенаправления ? Спасибо.
PM MAIL   Вверх
Mal Hack
Дата 27.8.2006, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



1. Поддомены ставим alias'ами к основному домену.
2. В скрипте анализируем HTTP_HOST.
PM ICQ   Вверх
svalerik
Дата 27.8.2006, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 27.8.2006

Репутация: нет
Всего: нет



Про скрипт все понятно, а вот с алиасами - не совсем. Просто пока кроме перенаправления на основной домен ни чего не получил.
PM MAIL   Вверх
Mal Hack
Дата 27.8.2006, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



Цитата(svalerik @  28.8.2006,  00:33 Найти цитируемый пост)
Про скрипт все понятно, а вот с алиасами - не совсем. Просто пока кроме перенаправления на основной домен ни чего не получил. 

В DNS на тот же IP что и осгновной домен ты прописываешь сабдомен или пишешь *.mydomain.com - это привязка любых сабдоменов.
Затем в Апаче, в настройке основного хоста ты пишешь: ServerAlias sub.mydomain.com и так все остальные. Тут вроде бы звездочка не прокатывает. Все. В таком случае, никакого перенаправления не будет, а при обращению к сабдомену будет открываться сайт основного домена, но для пользователя это будет сабдомен.
PM ICQ   Вверх
svalerik
Дата 28.8.2006, 02:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 27.8.2006

Репутация: нет
Всего: нет



Цитата(Mal Hack @ 27.8.2006,  23:35)
Цитата(svalerik @  28.8.2006,  00:33 Найти цитируемый пост)
Про скрипт все понятно, а вот с алиасами - не совсем. Просто пока кроме перенаправления на основной домен ни чего не получил. 

В DNS на тот же IP что и осгновной домен ты прописываешь сабдомен или пишешь *.mydomain.com - это привязка любых сабдоменов.
Затем в Апаче, в настройке основного хоста ты пишешь: ServerAlias sub.mydomain.com и так все остальные. Тут вроде бы звездочка не прокатывает. Все. В таком случае, никакого перенаправления не будет, а при обращению к сабдомену будет открываться сайт основного домена, но для пользователя это будет сабдомен.

Спасибо, но насколько я понял - это задается в <VirtualHost> а он в свою очередь в server config - а максимум что имеем мы это .htaccess ;-(  написал хостеру, может он чем поможет, хотя врядли...
PM MAIL   Вверх
Mal Hack
Дата 28.8.2006, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



Хостер се это может сделать.
PM ICQ   Вверх
svalerik
Дата 28.8.2006, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 27.8.2006

Репутация: нет
Всего: нет



Цитата(Mal Hack @ 28.8.2006,  08:37)
Хостер се это может сделать.

После того как получил доступ в панель управления - все создал, (а то клиент дал токо доступ на фтп :-) ) - спасибо за помощь в нужном направлении...
PM MAIL   Вверх
SamDark
Дата 28.8.2006, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: нет
Всего: 38



Я в своё время написал немного о применении mod_rewrite. Может кому поможет...

http://rmc.net.ru/article/programming/goodurl/
http://rmc.net.ru/article/programming/steganografia/


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
coyl
Дата 26.9.2006, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 13.6.2006

Репутация: нет
Всего: 1



Еще один вопрос возник по мод рерайт:
У меня есть движок, работающий на двух языках, как положено. Чтобы не делать две копии я использовал мод рерайт таким образом (русский сайт лежит в папке site, а английский - должен в site/com):
Код

RewriteRule ^site/com(.*)?$ /site$1 [E=LAN:EN]

В скрипте я обрабатываю переменную $_SERVER['LAN'] и в зависимости от её наличия - использую тот или иной файл языка. Проблема в следующем - у меня есть еще преобразования далее, которые преобразуют урл из tralivali.html в index.php?param=tralival - в таком духе.
Так вот при обращении к /site/com/ переменная LAN не объявляется. Так же как при обращении к урлам, подлежащим дальнейшему преобразованию. работает правильно только /site/com/index.php а остальные вместо английского файла языка используют русский.
Заранее благодарен за помощь  smile 

Это сообщение отредактировал(а) coyl - 26.9.2006, 13:19
PM MAIL   Вверх
SamDark
Дата 26.9.2006, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: нет
Всего: 38



coyl
Может лучше сделать что-то вроде:

Код

RewriteRule ^site/(ru|en)/(.*)?$ /index.php?lang=$1&url=$2


А потом просто обрабатывать $_GET['lang'] и $_GET['url']?


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
coyl
Дата 26.9.2006, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 13.6.2006

Репутация: нет
Всего: 1



нет. так неудобно, потому что есть еще множество преобразований.
Поэтому удоно просто обьявить переменную окружения, которая не фигурирует в урлах

Это сообщение отредактировал(а) coyl - 26.9.2006, 16:06
PM MAIL   Вверх
coyl
Дата 27.9.2006, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 13.6.2006

Репутация: нет
Всего: 1



Всё. я разобрался в ошибке. Когда мы устанавливаем [E=LAN:EN], то при дальнейших редиректах $_SERVER['LAN'] привращается в $_SERVER['REDIRECT_LAN'], а далее в $_SREVR['REDIRECT_REDIRECT_LAN']. И так далее при следующих преобразованиях. Как это поправить я еще не смотрел, но вот в этом именно состояла ошиибка.

Это сообщение отредактировал(а) coyl - 27.9.2006, 16:50
PM MAIL   Вверх
AztEK
Дата 4.1.2007, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: 1
Всего: 18



Хотел создать отдельную тему, но лучше сюда.

На домашнем сервере (Apache 1.3, Win32) не пашет mod_rewrite.
Расскомментировал строки
LoadModule rewrite_module modules/mod_rewrite.so
и
AddModule mod_rewrite.c
Создаю директорию, вставляю .htaccess
Код

RewriteEngine on
Options +FollowSymlinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ a.php?mode=$1

и файлик a.php
Код рабочий, тестил на другом хосте.

Так вот, проблема в следующем: при обращении к этой директории, сервер возвращает ошибку 400 Bad Request. В лог-файле ничего не пишется.

В чем проблема, не понимаю. Помогите, плз


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
Mal Hack
Дата 4.1.2007, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



Глянь сюда:
http://forum.vingrad.ru/topic-100827/unrea...uest/index.html
http://forum.vingrad.ru/topic-42980/unread...uest/index.html

Код, проверил, рабочий. Мог выкидывать Forbidden на пустом запросе, т.е. "/".
Глянь в настройках для .htaccess, возможно они корявые.
Да, и пример URI хочется увидеть на котором ошибка.
PM ICQ   Вверх
AztEK
Дата 4.1.2007, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: 1
Всего: 18



Глянул настройки. Да, там была проблема. В настройках хоста стояло AllowOverride All, вместо None.

Поправил, теперь на все запросы сервер отвечает просто 404.

URL: http://localhost/mod_rewrite/a.php <-- путь к файлу. Он выполняется.
Примеры запросов, на которые выползает 404:
http://localhost/mod_rewrite/test
http://localhost/mod_rewrite/test/
http://localhost/mod_rewrite/test.html

В логе остаются записи следующего вида:
[Thu Jan 04 21:08:39 2007] [error] [client 127.0.0.1] File does not exist: c:/program files/apache group/apache/htdocs/mod_rewrite/test/


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
Mal Hack
Дата 4.1.2007, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



Код

<Directory d:/home>
 Options Indexes Includes
 AllowOverride All
 Allow from All
#    Options FollowSymLinks
#    AllowOverride None
</Directory>

Код
<Files ~ "^\.ht">
 Order allow,deny
 Deny from all
</Files>

Код

Options +FollowSymlinks -MultiViews


На крайняк.
PM ICQ   Вверх
AztEK
Дата 4.1.2007, 19:41 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: 1
Всего: 18



Нет, не работает. Теперь снова 400.
С AllowOverride All - 400
С AllowOverride None - 404


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
Mal Hack
Дата 4.1.2007, 19:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



При выше написанных настройках у меня все работает.
Попробуй другие примеры в качестве затравки, да и в ссылках, что я дал 400 ошибка отлавливается...
PM ICQ   Вверх
AztEK
Дата 4.1.2007, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: 1
Всего: 18



Почитал манула к апачу:
Цитата

When this directive is set to None, then .htaccess files are completely ignored. In this case, the server will not even attempt to read .htaccess files in the filesystem.

When this directive is set to All, then any directive which has the .htaccess Context is allowed in .htaccess files.

Все-таки там All должно быть (вот почему 404 вылезало, RewriteRule не работало).


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
Mal Hack
Дата 4.1.2007, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



Цитата(AztEK @  4.1.2007,  20:13 Найти цитируемый пост)
Все-таки там All должно быть (вот почему 404 вылезало, RewriteRule не работало). 

Ну это само собой...
А вот откуда 400 вылезает....
PM ICQ   Вверх
AztEK
Дата 5.1.2007, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: 1
Всего: 18



О! Кажется нашел решение! Апач у меня 1.3.24
Вот информация о релизе 1.3.26 - http://www.apacheweek.com/issues/02-06-21
Цитата

Fix for a problem in mod_rewrite which would lead to 400 Bad Request responses for rewriting rules which resulted in a local path. Note: This will also reject invalid requests as issued by Netscape-4.x Roaming Profiles (on a DAV-enabled server)


Сейчас попробую поставить свежий.

Добавлено @ 12:27 
Даааа! Дааа!!  smile Поставил 1.3.33 (2.x не люблю - глючный) - всё заработало smile

Совет всем - обновляйте апач и будет вам счастье  smile 


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
Mal Hack
Дата 5.1.2007, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 15
Всего: 261



Цитата(AztEK @  5.1.2007,  12:15 Найти цитируемый пост)
(2.x не люблю - глючный) -

Ну это ты зря, конечно.


Цитата(AztEK @  5.1.2007,  12:15 Найти цитируемый пост)
О! Кажется нашел решение! Апач у меня 1.3.24

Молоток.
PM ICQ   Вверх
neokortex
Дата 19.7.2007, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 19.3.2007

Репутация: нет
Всего: нет



вот тут все говорится о преобразовании адресов вида
http://www.site.ru/news.php?years=2007&amp...th=6&day=19
в
http://www.site.ru/news/2007/6/19
но есть cms которые позволяют давать свои имена адресам, например ссылку вида
http://www.site.ru/news/2007/6/19 можно переделать в
http://www.site.ru/news/2007god/june/day19

Как можно произвести такое? Это тоже делается при помощи mod_rewrite, но я так понимаю используется еще и отделный файл, при помощи которого это делается.

Я правильно понимаю?
 smile 

 smile 
PM MAIL   Вверх
Smorodin
Дата 17.9.2007, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрейший
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 10.4.2006
Где: Пермь

Репутация: нет
Всего: 1



Содержимое .htaccess
Код

RewriteEngine on

Options +FollowSymlinks

RewriteBase /

RewriteRule ^.htaccess$ - [F]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,QSA]


Содержимое index.php
Код

<?php 
$arr = explode( '/' , $_SERVER['REQUEST_URI'] );
// Разбиваем переменную $_SERVER['REQUEST_URI'] на массив элементов по символу '/'.
print $arr[1] . '<br>';
print $arr[2] . '<br>';
print $arr[3] . '<br>';
print $arr[4] . '<br>';
?>



Если вводить localhost/123 или что нибудь подобное - тогда 404.
Если localhost/index или localhost/index/123 - то все работает...

Добавлено через 47 секунд
В чем проблема?


--------------------
Сделать можно все, только вопрос - когда?
PM MAIL Skype   Вверх
BSOD
Дата 15.11.2007, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 1.11.2004
Где: Гомель

Репутация: нет
Всего: 3



Такая проблемма:
делаю так:

RewriteRule ^(bussiness[/\\])$ category.php?category=economia
(переправляю с /bussiness/ на category.php и дальше по тексту)
вот, но если зайти 
корень/category.php..., то все нормально, а если
/корень/bussiness/ то получается, что мы как будто в папке bussiness, а на страничке у меня есть много картинок, с относительными путями, понятно, что совсем не относительно bussiness, вот теперь мне нужно, что бы вобще все, что юзер пытается брать из bussiness, бралось из корня... пробовал по разному - никак не заработало :(
подскажите, что делать (корень - не обязательно сам домен, это может быть и просто папка...)



--------------------
как корабль назовешь - то на нем и напишешь
PM MAIL WWW ICQ   Вверх
BSOD
Дата 15.11.2007, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 1.11.2004
Где: Гомель

Репутация: нет
Всего: 3



Все, само дошло smile

RewriteRule ^(.*)bussiness/(.*)$ $2


--------------------
как корабль назовешь - то на нем и напишешь
PM MAIL WWW ICQ   Вверх
Mavrun
Дата 5.12.2007, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 199
Регистрация: 25.11.2007

Репутация: нет
Всего: 13



Поможите плиз!
Код

RewriteEngine on
Options +FollowSymlinks
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+[^/])$ $1/ [QSA]

RewriteRule ^about[/](.*).php[/]$ ./index.php?task=about&id=$1 [QSA]


прописываю это в хтаксесе. на странице меняю урл на http://servername/about/1.php

когда загружаю в браузере и прохожу по новоиспечённой сссылке, то всё нормально. Но на той странице куда я попал вместо этой ссылки уже ссылка http://servername/about/about/1.php а если и там по ней счёлкаю, то уже попадаю на страницу http://servername/about/about/about/1.php

как с этим бороться?????




и ещё кстати проблема. когда я дописываю в хтаксесе ещё строчечку
Код
RewriteRule ^service[/](.*).php[/]$ ./index.php?task=service&id=$1 [QSA]

и на старнице ссылку переделываю на http://servername/service/1.php , то по ней проходить не получается, ошибка 404=(

Это сообщение отредактировал(а) Mavrun - 5.12.2007, 22:50
PM MAIL   Вверх
SnowZmiY
Дата 15.1.2008, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 14.1.2008

Репутация: нет
Всего: нет



Здраствуйсте
вместо предисловия - я пока еще полный чайник в написании правил но у меня возник такой вопрос:
Хостинг который я использую для подключения новых доменном использует поддомены Основного доменна как каталоги в которых быдет располагаться новый домен - в результате чего образуется ситуация когда - sitenew.siteold.ru и sitenew.ru - это одно и тоже хотя сайты совершенно разные и хотелось бы обращение к sitenew.siteold.ru запретить совсем, а оставить только sitenew.ru да вот только не пойму как это сделать. То есть если идет обращение к sitenew.siteold.ru чтобы сервер выдавал 
Код

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


--------------------------------------------------------------------------------

Apache/1.3.34 Server at www.profparket.ru Port 80

или что то подобное
я понимаю что нужно использовать правило - RewriteCond %{HTTP_HOST} (www.)?sitenew.siteold.ru [nocase]
и сделать редирект на 404 ошибку но как и куда ?????
подскажите как это можно сделать
Заранее спасибо

Это сообщение отредактировал(а) SnowZmiY - 15.1.2008, 00:07
PM MAIL   Вверх
ymymaster
Дата 17.1.2008, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 12.12.2007

Репутация: нет
Всего: нет



как сделать, что при авторизации при нажатии кнопки отмена был редирект на произвольную страницу?
так, как это сделано на взоре.
спасибо.
PM MAIL   Вверх
karterfree
Дата 24.3.2008, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 24.3.2008

Репутация: нет
Всего: нет



Такой вопрос. Есть .htaccess с содержанием:

Код


DirectoryIndex index.php
Options -Indexes 

RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^tiket index.php?modul=tiket
RewriteRule ^tiket/(.*)$ index.php?modul=tiket&page=$1

RewriteRule ^news index.php?modul=news
RewriteRule ^news/(.*)$ index.php?modul=news&page=$1

RewriteRule ^docs index.php?modul=docs
RewriteRule ^docs/(.*)$ index.php?modul=docs&page=$1

RewriteRule ^guide index.php?modul=guide
RewriteRule ^guide/(.*)$ index.php?modul=guide&page=$1

RewriteRule ^files index.php?modul=files
RewriteRule ^files/(.*)$ index.php?modul=files&page=$1

RewriteRule ^mypage index.php?modul=mypage
RewriteRule ^mypage/(.*)$ index.php?modul=mypage&page=$1

ErrorDocument 404 /index.php?modul=404
ErrorDocument 403 /index.php?modul=403



Такие правила были поставлены что бы ссылки
http://localost/tiket/ перенаправлялись на http://localost/index.php?modul=tiket

Но вот проблема: 
У меня появился дополнительный модуль http://localost/techspec/
Лежит по адресу http://localost/techspec/index.php
но когда я иду по адресу http://localost/techspec/ то попадаю на http://localost/index.php

Как дописать или переписать правила что бы 
http://localost/techspec/ перенаправлялся на http://localost/techspec/index.php (соответственно с сss и т.д.) 
а http://localost/tiket/,  http://localost/news/ и т.д. перенаправлялись на http://localost/index.php







PM MAIL   Вверх
SamDark
Дата 25.3.2008, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: нет
Всего: 38



karterfree
Код

RewriteRule ^techspec/(.*)$ techspec/index.php?modul=techspec&page=$1



--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
daxdax
Дата 14.4.2008, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 14.4.2008

Репутация: нет
Всего: нет



Здраствуйте!

Добавлено @ 16:09
Здраствуйте!
У меня вот такой вопрос.
у меня есть 

ссылки таково типа
www.domen.ru/4.php?title=word1
www.domen.ru/4.php?brend=word2
www.domen.ru/4.php?goods=word3

RewriteRule ^(['_',a-z0-9]+)$ domain/4.php ?title=$1 [NC]
RewriteRule ^(['_',a-z0-9]+)$ domain/4.php ?brend=$1 [NC]
RewriteRule ^(['_',a-z0-9]+)$ domain/4.php ?goods=$1 [NC]
RewriteRule ^([a-z]+){1,2}/(['_',a-z0-9]+)$ domain/4.php ?lang=$&1title=$2 [NC]
RewriteRule ^([a-z]+){1,2}/((['_',a-z0-9]+)$ domain/4.php ?lang=$&brend=$2 [NC]
RewriteRule ^([a-z]+){1,2}/((['_',a-z0-9]+)$ domain/4.php ?lang=$&goods=$2 [NC]


все word уникальны, так проблема втом что не получаеться объяснить mod_rewrite что если нет title=$1 то пременить brend=$1.
Он мне проосто открывает domain/$1.php?title= 
еслибы title=$1 был фаило то былобы проще можно бвлобы через

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

а так незнаю чё делать, если сможете помочь мне решить мою проблему буду очень благодарен.




Это сообщение отредактировал(а) daxdax - 14.4.2008, 16:33
PM MAIL   Вверх
Insbrook
Дата 14.2.2009, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 14.2.2009

Репутация: нет
Всего: нет



Снова вернуть к вопросу о доменах третьего уровня. Если их требуется счетное количество - да, прописал в DNS и в путь. 
А что делать если у меня на сайте например для всех sitename.tld/user1 должна работать ссылка user1.sitename.tld ?  Как сделать это? Не лезть же из-за каждого в DNS?
PM MAIL   Вверх
elCreator
Дата 30.3.2009, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 21.7.2007

Репутация: нет
Всего: -1



А у меня проблема в следующем:
Картинки (.jpg) на сайте лежат в папке /dirname. В корневой папке нет ни одного файла jpg. Нужно, чтобы при запросе вида http://sitename.com/Vasya111.jpg выдавалась картинка /dirname/Vasya111.jpg, причем все rewrite не должны коснуться вложенных директорий, т.е. по адресу http://sitename.com/somedir/Vasya111.jpg картинка отображаться не должна.
PM WWW ICQ   Вверх
PoMKA
Дата 7.4.2009, 04:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 24.3.2009

Репутация: нет
Всего: нет



Здраствуйте. Интересует правило такого вида:
http://localhost/out/324334asdfaDQ1_x356,y956,1.2.2006.jpg - Файл лежит на сервере
Нужно получить:
http://localhost/out/324334asdfaDQ1.jpg

Чтобы при запросе http://localhost/out/324334asdfaDQ1.jpg человек увидел изображение http://localhost/out/324334asdfaDQ1_x356,y956,1.2.2006.jpg, но урл остался не изменным, т.е. http://localhost/out/324334asdfaDQ1.jpg.

И ещё, файлов много, и они динамически изменяют название, поэтому элементарный пример:
RewriteRule ^out/324334asdfaDQ1.jpg$ out/324334asdfaDQ1_x356,y956,1.2.2006.jpg
Не предлогать...

elCreator, Я кстати на твой вопрос ответил:
Цитата

RewriteEngine On
RewriteRule ^Vasya111.jpg$ dirname/Vasya111.jpg

т.е. при запросе http://sitename.com/Vasya111.jpg, получишь свою картинку.
В папке somedir, создай .htaccess и туда впиши...
Цитата

Options -Indexes
AllowOverride All


Это сообщение отредактировал(а) PoMKA - 7.4.2009, 04:32
PM MAIL   Вверх
NetLord
Дата 22.4.2009, 08:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 25.2.2005

Репутация: нет
Всего: нет



Подскажите как мне сделать следующее
нужно перенаправить все запросы идущие на example.com на директорию subfolder,
то есть example.com-->example.com/subfolder
PM MAIL   Вверх
Reet
Дата 27.7.2009, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 27.7.2009

Репутация: нет
Всего: нет



подскажите пожалуйста как правильно прописать в .htaccess чтоб сервер поменял мне этот адрес  http://localhost/filmz/rec_full.php?id=10

на http://localhost/filmz/rec_full/10 а то что ни как не могу сообразить!!!

PM MAIL   Вверх
Jekis46
Дата 31.8.2009, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 31.8.2009

Репутация: нет
Всего: нет



Друзья, помогите что нужно прописать в mod_rewrite что бы страницы имели вид не /test.html а /?test=2

RewriteEngine   on
RewriteBase     /
RewriteRule     ^test/.html$ ?test=2 [R=permanent]

Это сообщение отредактировал(а) Jekis46 - 31.8.2009, 13:50
PM MAIL   Вверх
Jekis46
Дата 31.8.2009, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 31.8.2009

Репутация: нет
Всего: нет



Вот что в логе:

[Mon Aug 31 14:00:38 2009] [error] [client 127.0.0.1] File does not exist: E:/server/www/favicon.ico, referer: http://localhost/test.html
[Mon Aug 31 14:12:18 2009] [error] [client 127.0.0.1] File does not exist: E:/server/www/favicon.ico, referer: http://localhost/test.html

PM MAIL   Вверх
SneG0K
Дата 23.5.2010, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: нет
Всего: 54



Есть ссылки типа
/images/file.png
Как преобразовать в /new_images/file.png
Естественно, что file бывает разный. И формат тоже должен быть из (jpg|gif|png|swf)
PM WWW Skype   Вверх
SneG0K
Дата 24.5.2010, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: нет
Всего: 54



Окей, с этой проблемкой уже разобрался, но есть еще одна.
У меня используется система Чпу
index.php?q=p1\p2\p3\...\pn на \p1\p2\p3..\pn

Проблему решил так 
Код

    RewriteRule ^images/(.*).(gif|jpg|png|swf) /templates/default/images/$1.$2 [L]
    RewriteRule ^css/(.*).css /templates/default/styles/$1.css [L]
    RewriteRule ^js/(.*).js /templates/default/js/$1.js [L]

Но, есть файлики css. Внутри них есть конструкции вида
Код

background:url(images/header.jpg) no-repeat;

Они не срабатывают :-( Как это исправить?
И еще одна проблемка, если я в конец добавляю основное правило ЧПУ
Код

RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

То предыдущие правила просто не срабатывают. Как это решить?
Пытался сделать как-то так
Код

RewriteRule !(^css|js|images)/(.*)$ index.php?q=$1 [L,QSA]
Заработало, но опять перестали выполняться предыдущие правила.
PM WWW Skype   Вверх
WebPro
Дата 23.10.2010, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 23.10.2010

Репутация: нет
Всего: нет



Когда локалку ставили чего только не происходило. И по материалам, и по срокам, руководство у нас спокойное вообще, но и они бесились. Кто-то из наших клиентов привёл ребят из ITPrm.ru вот они в шоке были, когда мы рассказывали, что до них творилось 
PM MAIL   Вверх
klev2004
Дата 27.1.2012, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 27.1.2012

Репутация: нет
Всего: нет



мне нужно получать domen.com/en/?bla–bla

ситуация такая, в куках сохраняется выбранный юзером lang и в зависимости от lang должен добавляться к пути либо /en/ либо /ru/

То есть пользователь выбрал однажды lang=en и всюду куда бы он не переходил по сайту, чтобы в строке адреса его сопровождал /en/ 
то есть заходит на domen.com - в строку адреса подставляется domen.com/en, но при этом юзер получает страницу domen.com
также переходит по адресу domen.com/about (или domen.com/en/about) - а в строке адреса получает всегда domen.com/en/about, при этом получает страницу из domen.com/about

пишу пока так условие, пока не знаю как добавлять после /en/?bla–bla :

RewriteCond %{HTTP_COOKIE} ^.*lang=en.*$ [NC]

правило не знаю как правильно описать

нужна ваша помощь.

Это сообщение отредактировал(а) klev2004 - 27.1.2012, 22:02
PM MAIL   Вверх
brokernax
Дата 29.6.2012, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 29.6.2012

Репутация: нет
Всего: нет



та же проблема
PM MAIL WWW   Вверх
upbc
  Дата 13.9.2012, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 13.9.2012

Репутация: нет
Всего: нет



Добрый день. 

Подскажите, пожалуйста, как в файле .htaccess ссылку http://www.sitename.com/ru/tag/tagname.html?id=XX преобразовать в ссылку вида http://www.sitename.com/ru/tag/tagname.html smile   

ХХ - id тега в списке тегов, уникальное; tagname - имя тега, тоже уникальное.

Спасибо заранее за ответ.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Администрирование Web серверов и Web служб | Следующая тема »


 




[ Время генерации скрипта: 0.4494 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.