Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Apache

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: mod rewrite правило ВЕСЬ МОЗГ СЛОМАЛ!
 
 автор: s89236470002   (05.10.2012 в 07:28)   письмо автору
 
 

# ЕСЛИ ФАЙЛ ЕСТЬ В папке кеша ТО ВЫЗЫВАЕМ ЕГО
RewriteCond %{DOCUMENT_ROOT}/n_cash/%{HTTP_HOST}/%{REQUEST_URI} -f
RewriteRule ^(.+) /n_cash/%{HTTP_HOST}/$1 [L]

# если нет кеша все запросы на пхп скрипт отправляем
## RewriteCond %{DOCUMENT_ROOT}/n_cash/%{HTTP_HOST}/%{REQUEST_URI} !-f
## RewriteRule ^(.*)$ translator.php [L]
-------------------------------------------------------------------------------------------------------------
Проблема в том, что все запросы идут на translator.php

коментирую последние 2 строчки, запросы идут на файлы при их наличии...
то есть в адресной строке
я ввожу - http://localhost/1/2/3/1.jpg
сервер возвращает файл - /n_cash/localhost/1/2/3/1.jpg

только в случае закомментированных последних 2х строк
стоит их раскоментировать и АБСОЛЮТНО ВСЕ ЗАПРОСЫ ИДУТ НА скрипт не зависимо от наличия файла в вышеуказанной дирректории...

Мне нужно чтобы в случае отсутствия файла все запросы направлялись на translator.php
что я делаю нетак????? - всю ночь с этой байдой просидел....... /(

Благодарю заранее за помощь!

  Ответить  
 
 автор: Sfinks   (05.10.2012 в 15:23)   письмо автору
 
   для: s89236470002   (05.10.2012 в 07:28)
 

Если я не ошибаюсь, то переменная %{REQUEST_URI} содержит модифицированную всеми предыдущими правилами строку запроса. Соответственно у вас ко второму правилу приходит строка %{DOCUMENT_ROOT}/n_cash/%{HTTP_HOST}/%{REQUEST_URI}, которую вы еще раз прилепляете к %{DOCUMENT_ROOT}/n_cash/%{HTTP_HOST}/, и получаете путь к файлу которого нет. Выведите в translator.php массив $_SERVER и посмотрите что у вас куда отправлено. Попробуйте завязать все на переменную %{REQUEST_FILENAME} - она не меняется по ходу выполнения/невыполнения правил и реврайтов.

  Ответить  
 
 автор: s89236470002   (05.10.2012 в 16:11)   письмо автору
 
   для: Sfinks   (05.10.2012 в 15:23)
 

Массив $_SERVER в пхп Скрипте....

[REDIRECT_REDIRECT_STATUS] => 200
[REDIRECT_STATUS] => 200
[HTTP_USER_AGENT] => Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.10.289 Version/12.02
[HTTP_HOST] => test1.ru
[HTTP_ACCEPT] => text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
[HTTP_ACCEPT_LANGUAGE] => ru-RU,ru;q=0.9,en;q=0.8
[HTTP_ACCEPT_ENCODING] => gzip, deflate
[HTTP_COOKIE] => OAID=399eec298d336b06ea787e47364f0af0; __qca=P0-52045653-1349032159986; __csmv=55bf84b5ca02d5fe; datmsid=4719c21c24dd301700524ea9769a128e; __csv=a6d334ab36ab5463|0; __utma=191504943.869423523.1348309568.1349388322.1349391364.5; __utmz=191504943.1348309568.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __utmv=191504943.|1=ljuser=TODO%3Aloggedin%2Fanonymous%2Fyou=1
[HTTP_CACHE_CONTROL] => no-cache
[HTTP_CONNECTION] => Keep-Alive
[PATH] => \usr\local\ImageMagick;\usr\local\php5;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem
[SystemRoot] => C:\WINDOWS
[COMSPEC] => C:\WINDOWS\system32\cmd.exe
[PATHEXT] => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
[WINDIR] => C:\WINDOWS
[SERVER_SIGNATURE] =>
Apache/2.2.4 (Win32) mod_ssl/2.2.4 OpenSSL/0.9.8k PHP/5.3.3 Server at test1.ru Port 80


[SERVER_SOFTWARE] => Apache/2.2.4 (Win32) mod_ssl/2.2.4 OpenSSL/0.9.8k PHP/5.3.3
[SERVER_NAME] => test1.ru
[SERVER_ADDR] => 127.0.0.1
[SERVER_PORT] => 80
[REMOTE_ADDR] => 127.0.0.1
[DOCUMENT_ROOT] => Z:/home/test1.ru/www
[SERVER_ADMIN] => admin@localhost
[SCRIPT_FILENAME] => Z:/home/test1.ru/www/2.php
[REMOTE_PORT] => 1487
[REDIRECT_URL] => /n_cash/test1.ru/images/logo2p333.jpg
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PROTOCOL] => HTTP/1.1
[REQUEST_METHOD] => GET
[QUERY_STRING] =>
[REQUEST_URI] => /images/logo2p333.jpg
[SCRIPT_NAME] => /2.php
[PHP_SELF] => /2.php
[REQUEST_TIME] => 1349437539
[argv] => Array
(
)




----------------------------------------------------------------------------------------------------------------------
причем в [REDIRECT_URL] всегда написана совершенно адекватная вещь !
то есть - указывает как раз туда, куда мне нужно!!!

В браузере - http://test1.ru/images/logo03.jpg
[REDIRECT_URL] => /n_cash/test1.ru/images/logo03.jpg
- ЭТОТ ФАЙЛ ЕСТЬ, НО ОТОБРАЖАЕТСЯ ВСЕ РАВНО ПХП СКРИПТ!
(стоит закомментировать в htacces 2 последних строки - отображается файл!)

В браузере - http://test1.ru/images/12345.jpg
[REDIRECT_URL] => /images/12345.jpg
интересно чисто логически., а почему тут не "2.php" ??? он же так настырно отображается в браузере...

а [REQUEST_URI] у меня всегда как в браузере.....

------------------------------------------------------------------------------------------------
сейчас сделал костыль (отдаю картинки итп файлы PHP скриптом)., работает, но оперативку кушает нещадно. (картинки по 5-7 мегабайт со скрипом лезут через несчастный пхп скрипт.)

REQUEST_FILENAME - не получитс\ мне нужно воссайдать полный путь только в дирректории n_cashe

т.е. файл - /1/2/3/4/5.jpg
кеш должен лежать - /n_cash/хост /1/2/3/4/5.jpg (именно с сохранением структуры директорий)

Короче., я в недоумении …..

  Ответить  
 
 автор: s89236470002   (05.10.2012 в 18:21)   письмо автору
 
   для: s89236470002   (05.10.2012 в 16:11)
 

Вопрос так и остался не решенным..

  Ответить  
 
 автор: Sfinks   (06.10.2012 в 17:06)   письмо автору
 
   для: s89236470002   (05.10.2012 в 16:11)
 

По-моему вы немного путаете, что такое %{DOCUMENT_ROOT}.
Это корень домена, а не корень вашего аккаунта.
Т.е. при запросе http://test1.ru/images/logo03.jpg
у вас идет редирект на файл Z:/home/test1.ru/www/n_cash/test1.ru/images/logo03.jpg
который также доступен через браузер по адресу http://test1.ru/n_cash/test1.ru/images/logo03.jpg
Он действительно есть или вы хотите попасть в папку выше корня сайта, т.е. в Z:/home/n_cash/test1.ru/ ???

  Ответить  
 
 автор: s89236470002   (10.10.2012 в 00:16)   письмо автору
 
   для: Sfinks   (06.10.2012 в 17:06)
 

Он действительно есть!!! все верно!!!
мне нужен именно файл Z:/home/test1.ru/www/n_cash/test1.ru/images/logo03.jpg !!!!

я же говорю стоит только закомментировать последние 2 строки

## RewriteCond %{DOCUMENT_ROOT}/n_cash/%{HTTP_HOST}/%{REQUEST_URI} !-f
## RewriteRule ^(.*)$ translator.php [L]
файлы из кеша отдаются!!!

Но мне надо чтобы в случае отсутствия файла обращение было именно к пхп скрипту
(если я раскомментирую эти строчки) то не зависимо от урла
-> ВСЕГДА ОБРАЩАЕТСЯ К СКРИПТУ

...так я эту штуку и не поборол (для меня вопрос остался очень актуален)

сейчас временно поставил костыль в виде ErrorDocument 404 /translator.php

  Ответить  
 
 автор: Sfinks   (12.10.2012 в 08:12)   письмо автору
 
   для: s89236470002   (10.10.2012 в 00:16)
 

Я почему усомнился - потому что у вас в правиле
RewriteRule ^(.+) /n_cash/%{HTTP_HOST}/$1 [L]
ссылка для редиректа начинается со /, а это значит "от корня аккаунта", а не "от корня сайта".

Попробуйте так - Если нет файла, то редирект, иначе, если урл не кончается на translator.php, значит файл есть и показать его:
RewriteCond %{DOCUMENT_ROOT}/n_cash/%{HTTP_HOST}/%{REQUEST_URI} !-f 
RewriteRule ^(.*)$ translator.php [L]

RewriteCond %{REQUEST_URI} !translator.php$
RewriteRule ^(.*)$ n_cash/%{HTTP_HOST}/$1 [L]

  Ответить  
 
 автор: s89236470002   (13.10.2012 в 07:57)   письмо автору
490 байт
 
   для: Sfinks   (12.10.2012 в 08:12)
 

Неа все равно translator при любом запросе ))

благодарю вас за внимание к данному вопросу!)

может будет минутка посмотрите? (архив прикрепленный)
в архиве содержимое корня сайта 3 файлика...

  Ответить  
 
 автор: Sfinks   (13.10.2012 в 09:49)   письмо автору
 
   для: s89236470002   (13.10.2012 в 07:57)
 

1. Всегда указывайте RewriteBase.
2. Внимательнее следите за слешами.
3. Если совсем не понятно, что происходит, можно в контейнере VirtualHost вписать
RewriteEngine On
RewriteLogLevel 9
RewriteLog "logs/rewrite.log"
и попробовать разобраться.

Короче вот так работает:
RewriteEngine On 
RewriteBase /

RewriteCond %{REQUEST_URI} !^/n_cash 
RewriteCond %{DOCUMENT_ROOT}/n_cash/%{HTTP_HOST}%{REQUEST_URI} !-f  
RewriteRule ^(.*)$ translator.php [L] 

RewriteCond %{DOCUMENT_ROOT}/n_cash/%{HTTP_HOST}%{REQUEST_URI} -f  
RewriteRule ^(.*)$ n_cash/%{HTTP_HOST}/$1 [L]

  Ответить  
 
 автор: s89236470002   (13.10.2012 в 14:19)   письмо автору
 
   для: Sfinks   (13.10.2012 в 09:49)
 

Благодарю! очень сильно выручили!!! сервер аж заулыбался когда я костыли убрал!!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования