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

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

Автор: DzOOMer
Дата сообщения: 07.08.2006 12:30
совсем уже запутался:
есть адрес http://www.mysite.com/ - сайт на русском языке
для поддержки английского использую адрес http://www.mysite.com/en/

смысл в том, что скрипт (http://www.mysite.com/index.php) на оба языка один и работает (переключает язык/текст) по наличию в url строки /en

чтобы переадресовать все что идет на http://www.mysite.com/en/ в директории /en/ лежит

.htaccess
RewriteEngine on
RewriteRule ^(.*)$ /$1 [L]

и все нормально работает (index.php срабатывает переключаяс на en), кроме картинок и стилей css. (на домашнем хосте все работает отлично)

например картинка имеет адрес
http://www.mysite.com/skins/img/logo.gif - отображается ок
но при адресе
http://www.mysite.com/en/skins/img/logo.gif выдает ошибку:
404 Not Found
nginx/0.3.46


если знаете подскажите решение... как заставить отображать картинки

в общем я так понял, что все дело в nginx который статические файлы (в том числе и картинки) выдает сразуже, не пуская их до апача с модреврайтером. тупик...
Автор: Cheery
Дата сообщения: 08.08.2006 00:39
DzOOMer

Цитата:
в общем я так понял, что все дело в nginx который статические файлы (в том числе и картинки) выдает сразуже, не пуская их до апача с модреврайтером. тупик...

именно для этого его и используют, чтобы разгрузить сервер.

Цитата:
например картинка имеет адрес
http://www.mysite.com/skins/img/logo.gif - отображается ок
но при адресе
http://www.mysite.com/en/skins/img/logo.gif выдает ошибку:
404 Not Found
nginx/0.3.46

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

Цитата:
.htaccess
RewriteEngine on
RewriteRule ^(.*)$ /$1 [L]

и все нормально работает (index.php срабатывает переключаяс на en), кроме картинок и стилей css. (на домашнем хосте все работает отлично)

каким образом? не вижу RewriteCond
Автор: Delphi6
Дата сообщения: 09.08.2006 19:46
Вот возник такой вопрос,

Возможно ли учесть сколько раз было выполнено определенное правило в mod_rewrite? Типа у меня есть статический урл мне надо подсчитать кто и когда, сколько раз его юзал (кликал).

Спасибо за совет

п.с. Думал редиректить на РНР скрипт но тогда пользователь заметит что был редирект.
Автор: edogs
Дата сообщения: 10.08.2006 01:47

Цитата:
Типа у меня есть статический урл мне надо подсчитать кто и когда, сколько раз его юзал (кликал).

а логи апача?
Автор: kaw
Дата сообщения: 10.08.2006 01:58
строка из офф. документации по Apache (mod_rewrite)

Example:
RewriteLog "/usr/local/var/apache/logs/rewrite.log"
Автор: Delphi6
Дата сообщения: 10.08.2006 09:17
edogs
По идее верно, но доступа к логам Апача на простом хостинге не дадут, кроме что если дедик взять.

kaw
Ок, думаю совет дельный и будет пригоден, если только в логах будет сохраняться полная информация а не просто сколько раз было выполнено данное преобразование.

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

Добавлено:
kaw

Цитата:
RewriteLog "/usr/local/var/apache/logs/rewrite.log"

Оказалось что в моем случае это не подходит, сохраняется не та информация. Нет инфы referrer, IP, time а для меня первое самое главное. Получается продолжаем поиски
Автор: sTa1kEr
Дата сообщения: 10.08.2006 10:25
Delphi6

Цитата:
По идее верно, но доступа к логам Апача на простом хостинге не дадут


Цитата:
RewriteLog "/usr/local/var/apache/logs/rewrite.log"

Доступа к логам нету, а доступ к httpd.conf есть? Хм...

Цитата:
Думал редиректить на РНР скрипт но тогда пользователь заметит что был редирект.

RewriteMap
Автор: Delphi6
Дата сообщения: 10.08.2006 11:34
sTa1kEr

Цитата:
Доступа к логам нету, а доступ к httpd.conf есть?

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

Ой блин, меня сейчас осенило Если происходит rewrite урла, то пользователь даже не видит что данный урл преобразуется в другой

Значит делаем подмену урла:
http://mysite.com/send.cgi?file=game.zip

на php скрипт
http://mysite.com/count.php

и потом из самого файла count.php редиректим на реальный файл
http://mysite.com/files/game.zip

Пожалуйста проверьте правильны ли мои рассуждения?
Автор: sTa1kEr
Дата сообщения: 10.08.2006 11:48
Delphi6

Цитата:
А почему вы решили что у меня есть доступ к httpd.conf?

Потому что,
RewriteLog
Цитата:
The directive should occur only once per server config.
Автор: Delphi6
Дата сообщения: 10.08.2006 12:22
Что-то у меня не работает при выборе линка http://mysite.com/ru/send.cgi?file=game.zip не редиректит на http://mysite.com/count.php


Код: RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteCond %{REQUEST_URI} ru/send.cgi?file=game.zip
RewriteRule ^.*$ http://mysite.com/count.php
Автор: rovshan
Дата сообщения: 14.08.2006 00:08
Прошу помощи разобраться в проблеме которую вот уже 2 дня не могу решить. Не буду описывать что я уже перебробовал, так как сам окончательно запутался....

Проблема такова:

На главной директории сайта www. moyaproblema.com есть папка /MIKO где установлена CMS Nuka (php+MySql). В этой же папке есть HTACCESSS file c прописанными mod_rewrite rules дабы изменить динамические ссылки в статические. Если набрать в броузере www. moyaproblema.com/MIKO то все работает , ссылки все статические и активные. все линки HTML работают.

Решил что лучше зарегитсрировать SUBDOMAIN http://MIKO.moyaproblema.com, то есть сайт CMS Nuka установленная в папке /MIKO будет иметь свой отделный URL !

Как и полагается без задней мысли в Панели Управления моего аккаунта на сайте где нахидится мой хостинг я зарегистрировал SUBDOMAIN http://MIKO.moyaproblema.com , где указал папку /MIKO как контент этого субдомейна.

В результате когда набираю в броузере http://MIKO.moyaproblema.com то выдается исключительно РНР ссылки , как будто и нет HTACCESS fila. Все запросы на HTML ссылки типа http://MIKO.moyaproblema.com/index.html выдают ошибку 404.

В главной директории нет никакого HTACCESS fila. HTACCESS файл в папке /MIKO такой:
:::::::::::::::::::::::::::::::::::::::::::::::
<Files .ftaccess>
deny from all
</Files>

# -------------------------------------------
# Start of Auth
# -------------------------------------------
<Files .staccess>
deny from all
</Files>

# deny most common except .php
<FilesMatch "\.(inc|tpl|h|ihtml|sql|ini|conf|class|bin|spd|the me|module)$">
deny from all
</FilesMatch>

<Limit GET PUT POST>
Order Allow,Deny
Allow from all
</Limit>

Options +FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine On


#The next lines check for Email Spammers Robots and redirect them to a fake page
RewriteCond %{HTTP_USER_AGENT} ^Alexibot [OR]
RewriteCond %{HTTP_USER_AGENT} ^asterias [OR]
RewriteCond %{HTTP_USER_AGENT} ^BackDoorBot ..............

RewriteRule ^index.html index.php [L]

#Articles
RewriteRule ^article-([0-9]*)-([a-z]*)-([0-9]*)-([0-9]*).html page.php?cool=News&that=article&fid=$1&mode=$2&ord er=$3&thold=$4 [L]
..........
</IfModule>
:::::::::::::::::::::::::::::::::::::::::::

Не смог найти решение этого вопроса. Почему так www. moyaproblema.com/MIKO/index.html все ОК а так http://MIKO.moyaproblema.com/index.html 404 !

Надеюсь что кто то знает ответ . Устал уже в этом разбираться .
Спасибо заранее за любую помощь.
Автор: rovshan
Дата сообщения: 15.08.2006 02:43
ответ нашел на другом форуме

надо вставить


RewriteBase /

после

RewriteEngine on

и все дела .
Автор: beaggy
Дата сообщения: 16.08.2006 18:29
Как отрегулировать ЧПУ (russkie imena stranic - translitom)

Насколько я понял из изучения материалов в разных форумах, Человеко-Понятные URL создаются в файле .htaccess через MOD_REWRITE

Здесь в этой теме про MOD_REWRITE обсуждается много чего, это целый учебник. Но я-то - не программист. И мне нужна элементарная и понятная инструкция.

Подскажите, как сделать (где и что вписать), чтобы URL имели такой вид:

1) Страницы имеют расширение .html

2) Russkie imena stranic otobrazhajutsja translitom (volapukom, krakozyabroy), то есть в виде http://www.chtoto.ru/articles/psihologia/test_lushera.html вместо http://www.chtoto.ru/articles.php?group_id=психология&article_id=тест_люшера

3) Имена страниц формируются из названия темы, введенной при заполнении формы сообщения.

Автор: Perf2k2
Дата сообщения: 17.08.2006 12:40
Всем привет. Столкнулся с такой проблемой.

Есть файл .htaccess следующего содержания:

Код:
RewriteEngine On
RewriteBase /
RewriteRule ^progs/(.*).html$ progs.php?p=$1 [L]
Автор: Brodyaga
Дата сообщения: 17.08.2006 12:48
Ну раз узнал что не правилах то иди дальше, смотри на существование такой же папки, смотри на возможность CGI выполнения в папке и так далее.
Неплохо бы софтину сказать а также структуру каталогов.
Автор: N Sensey N
Дата сообщения: 17.08.2006 19:31
ЧПУ

Вот что имеем

RewriteRule ^pf,([0-9]+)-.*\.html modules.php?name=Users&file=show_info&user_id=$1 [NC] [L]

Теперь - с этим вот работает:

http://domen/pf,1-blablabla.html

А вот если м ызасунем туда вопросительные знаки - уже не работает:

http://domen/pf,1-??????.html

Как побороть? Очень важно... копал гугль.. яндекс... не нашел ниче...
Автор: DzOOMer
Дата сообщения: 04.09.2006 17:24
Cheery


Цитата:
в логах апача обращение идет?

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


Цитата:
вообще то nginx не может говорить есть файл на сервере или нет.. он выдает то, что в кэше. а если в кэше нет, то запрос должен идти к серверу.

вот html код ошибки при обращении к файлу:

Код: <html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/0.3.46</center>
</body>
</html>
Автор: Yamb
Дата сообщения: 24.09.2006 00:55
Как заставить работать mode rewrite для PHP файлов, причем если PHP установлен как CGI?

Добавлено:
P.S. cgi.fix_pathinfo=1 в php.ini не помогло
Автор: Cheery
Дата сообщения: 24.09.2006 00:57
Yamb

Цитата:
Как заставить работать mode rewrite для PHP файлов, причем если PHP установлен как CGI?

объясни связь между mod_rewrite и PHP файлами?
Автор: Sky hawk
Дата сообщения: 24.09.2006 17:56
собственно есть проблема (распространенная)
есть сайт - site.ru у него есть каталог ссылок, путь site.ru/links
нужно сделать чтобы субчик links.site.ru был ревалентин site.ru/links
об этом только я ленивый в сети не писал, но прочив весь форум так и не понял как сделать. больше всего непонял ли это сотворить имея клинтские права (т.е. к конфигам апача я прав не имею) я простой юзер.
может кто помочь в борьбе за правое дело?
спасибо.
Автор: Yamb
Дата сообщения: 26.09.2006 01:22
Cheery
Если PHP установлен как CGI то вся обработка идет через php.exe на PHP 4 и php-cgi.exe на PHP 5. Этим .exe файлам Apache передает ссылки на PHP файлы, такие как C:\Apache\home\site\page.php при вызове страницы page.php.
В случае использования mod_rewrite Apache начинает передавать ссылки на несуществующие файлы и получает "No input file specified." в ответ. Переменная SCRIPT_FILENAME оказывается пустой, а PHP использует эту переменную.
Подробно об этом тут http://bugs.php.net/bug.php?id=28227
Основная идея в том что
In summary, PHP 4.3.6 should not be relying solely upon SCRIPT_FILENAME to determine if it's running as a CGI.

Кто еще сталкивался с подобной проблемой и решил ее конфигурированием?
Автор: vii
Дата сообщения: 26.09.2006 16:58
Sky hawk
Нужно иметь доступ к конфигу Апача и к DNS.
Автор: Sky hawk
Дата сообщения: 26.09.2006 17:57
vii

Цитата:
Нужно иметь доступ к конфигу Апача и к DNS.

т.е. мне нужно обратится к хостеру с тем чтобы он что-там прписал. А потом мудрить хтацесс?
Спасибо,
Извенюсь за назойлевость.
Автор: Cheery
Дата сообщения: 26.09.2006 17:59
Sky hawk

Цитата:
т.е. мне нужно обратится к хостеру с тем чтобы он что-там прписал.

да

Цитата:
А потом мудрить хтацесс?

httpd.conf
FAQ по Apache
Автор: N Sensey N
Дата сообщения: 27.09.2006 14:12
Странная фигня творится...

На локалке вот это

RewriteRule ^photo_sets.html$ modules.php?name=Photo_Sets [NC] [L]

Работает без проблем

А вот заливаю на сервер - ошибка 404

Экранирую точку

RewriteRule ^photo_sets\.html$ modules.php?name=Photo_Sets [NC] [L]

то же самое....

А вот правила без точек.. что то типа

RewriteRule ^photo_sets(/)?$ modules.php?name=Photo_Sets [NC] [L]

работают на серваке на ура...

В чем может быть дело?
Автор: vii
Дата сообщения: 27.09.2006 16:24
Sky hawk

Цитата:
т.е. мне нужно обратится к хостеру с тем чтобы он что-там прписал. А потом мудрить хтацесс?
Спасибо,
Извенюсь за назойлевость.

Тебе нужно:
1. Чтобы тот, кто менеджит DNS для твоего домена, (зачастую это твой хостер, хотя и необязательно) прописал *.your_domain (или выборочно link1.your_domain, link2.your_domain, etc.) на нужный IP
2. Далее возможны 2 варианта:
2.1. Классический. Хостер в httpd.conf создает тебе отдельные виртуальные сервера для link1.your_domain (и т.п.) с директориями в твоих поддиректориях link1 (и т.п.)
2.2. Хитропопый (лично я не пробовал). Хостер в httpd.conf прописывает алиасы для твоего виртуального сервера *.your_domain (или опять же выборочно link1.your_domain, link2.your_domain, etc.). После этого ты в .htaccess (или же хостер в httpd.conf) прописываешь правила для mod_rewrite, как описано здесь.
Автор: diSmiSS
Дата сообщения: 29.09.2006 00:18
Помоги плиз готовым решением....
было http://forum.olddomain.ru/
стало http://newdomain.ru/forum/
Необходимо чтобы при запросах типа
http://forum.olddomain.ru/xxxx.php?id=3
переадресовавыло на
http://newdomain.ru/forum/xxxx.php?id=3

PS с регулярными выражениями не очень дружу . У самого получилось только это....
RewriteEngine on
RewriteCond %{HTTP_HOST} !^forum\.olddomain\.ru
RewriteRule (.*) http://newdomain.ru/forum/$1 [R=301, L]
Автор: diSmiSS
Дата сообщения: 02.10.2006 23:48

Код: RewriteCond %{HTTP_HOST} ^my\.domain1\.ru$ [NC]
RewriteRule ^(.*)$ http://domain2.ru/forum/$1 [L,R]
Автор: Cheery
Дата сообщения: 03.10.2006 00:13
diSmiSS

Цитата:
подскажите хоть где ошибка

в чем она выражается?? включи логирование обработки и увидишь как все обрабатывается.
для твоих целей достаточно просто redirectmatch
http://httpd.apache.org/docs/1.3/mod/mod_alias.html#redirectmatch
Автор: Sky hawk
Дата сообщения: 05.10.2006 21:06
Cheery
vii

после общения с хостером, я пришел к выводу что проще взять VPS. Там как раз можно будет то что Вы мне посоветовали самому прописать имея root.
спасибо.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445

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


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