Поиск:

Ответ в темуСоздание новой темы Создание опроса
> FAQ. Apache. mod_rewrite. Начни с простого. Было много вопросов. Написал статейку. 
:(
    Опции темы
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   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Администрирование Web серверов и Web служб | Следующая тема »


 




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


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

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