Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как бы движок, но дико втыкает [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (3): « 1 [2] 3 »   

> Описание: Конкурс с призовым фондом 10$
tsoi85
Отправлено: 14 Августа, 2011 - 11:41:36
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Июнь 2011  


Помог: 10 раз(а)




Ещё вариант:

Спойлер (Отобразить)

(Отредактировано автором: 14 Августа, 2011 - 12:56:17)

 
 Top
ok
Отправлено: 14 Августа, 2011 - 11:52:33
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




tsoi85
Не открываются все страницы с / на конце, включая корень сайта.
 
 Top
White
Отправлено: 14 Августа, 2011 - 12:12:51
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011  
Откуда: Днепропетровск


Помог: 28 раз(а)




PHP:
скопировать код в буфер обмена
  1. preg_match("/^([-_a-zA-Z0-9\/\.]+)\.html$/", $_GET['r']))

так как не соответсуют шаблону возвращается пустой $url, а далее по условию $error=1; и должна выводиться 404


-----
if(time()>1356048000) die();
 
 Top
ok
Отправлено: 14 Августа, 2011 - 12:44:07
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




White пишет:
PHP:
скопировать код в буфер обмена
  1. preg_match("/^([-_a-zA-Z0-9\/\.]+)\.html$/", $_GET['r']))

так как не соответсуют шаблону возвращается пустой $url, а далее по условию $error=1; и должна выводиться 404

Ошибка здесь, не только не выводится 404, но и не выводится http://site[dot]ru/
 
 Top
tsoi85
Отправлено: 14 Августа, 2011 - 12:55:44
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Июнь 2011  


Помог: 10 раз(а)




Поправил.
Спойлер (Отобразить)

(Отредактировано автором: 14 Августа, 2011 - 16:28:07)

 
 Top
ok
Отправлено: 14 Августа, 2011 - 13:05:32
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




tsoi85
Страницы со слешем, включая корень, стали открываться. Но по-прежнему, выводится пустая страница вместо 404 и выводятся /index.(html|php). Кириллица в урлах перестала выводится, выводится пустая страница, видимо движок не может разродится 404.

(Отредактировано автором: 14 Августа, 2011 - 13:14:56)

 
 Top
tsoi85
Отправлено: 14 Августа, 2011 - 13:49:58
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Июнь 2011  


Помог: 10 раз(а)




ok пишет:
tsoi85
Страницы со слешем, включая корень, стали открываться. Но по-прежнему, выводится пустая страница вместо 404 и выводятся /index.(html|php).


/index.php - Выводится только (в корне), файл ведь существует и не него не действует:
CODE (htmlphp):
скопировать код в буфер обмена
  1. RewriteCond %{REQUEST_FILENAME} !-f
  2. RewriteCond %{REQUEST_FILENAME} !-d
  3. RewriteRule ^(.*)$ index.php?r=$1 [L]

Например обращение к /articles/index.php - Возвращает 404.

/articles/index.html тоже самое что и /articles/horosho.html
Можно в скрипте указать по умолчанию, не index, а например default и переименовать соответственно в папке data/*.
PHP:
скопировать код в буфер обмена
  1. $incfile .= "default.";
  2. $incfile .= $url."default.";

И не будет /articles/index.html
Хотя я считаю это лишним действием.

А errors/404.php - не пустой?
 
 Top
ok
Отправлено: 14 Августа, 2011 - 14:50:58
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




tsoi85 пишет:
/index.php - Выводится только (в корне), файл ведь существует и не него не действует:
CODE (htmlphp):
скопировать код в буфер обмена

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?r=$1 [L]

tsoi85 Большое спасибо за помощь!
Это не действует Ваш .htaccess на Ваш /index.php. В моем первоначальном варианте, а также в предложенных с массивами, на запросы "/index.html", "/index.php" реально выводится 404 со своим содержанием, хотя файл /index.php существует. Можете сами убедиться, проделав несложный эксперимент.

Цитата:
Например обращение к /articles/index.php - Возвращает 404.

Наверное, пытается возвратить, но у него не получается.

Цитата:
/articles/index.html тоже самое что и /articles/horosho.html

Не понял. В /articles/index.html содержится список статей со ссылками на соответствующие файлы, /articles/horosho.html это одна из статей, содержащаяся в этом списке. Два разных файла, две разные страницы со своим уникальным содержанием.

Цитата:
Можно в скрипте указать по умолчанию, не index, а например default и переименовать соответственно в папке data/*.
PHP:
скопировать код в буфер обмена

$incfile .= "default.";
$incfile .= $url."default.";


И не будет /articles/index.html
Хотя я считаю это лишним действием.

Это действительно лишнее действие, так как сути дела (дублирование контента) не меняет. Одно и то же содержимое выводится по ТРЕМ адресам: в первом случае - "/", "/index.html", "/index.php"; во втором - "/", "/default.html", "/default.php".

Цитата:
А errors/404.php - не пустой?

Не пустой, открывается и выводится другим вариантом движка.
 
 Top
tsoi85
Отправлено: 14 Августа, 2011 - 16:27:31
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Июнь 2011  


Помог: 10 раз(а)




ok, вариант с Вашим .htaccess

При обращении к /index.(html|php) - теперь 404.
Проблема с показом errors/404.php, думаю теперь также решена.

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $url = (preg_match("/^([-_a-zA-Z0-9\/\.]+)(\.html|\/)$/", $_SERVER['REQUEST_URI'])?str_replace('..', '', $_SERVER['REQUEST_URI']):'');
  3. if($_SERVER['HTTP_HOST'] == 'www.site.ru') {
  4.   header("HTTP/1.1 301 Moved Permanently");
  5.   header("Location: http://site.ru".$_SERVER['REQUEST_URI']);
  6.   exit;
  7. }
  8. $incfile = "data";
  9. if($_SERVER['REQUEST_URI']=='/') {
  10.     $incfile .= "/index.";
  11. } elseif (!empty($url) && substr($url, strlen($url)-1)=='/') {
  12.     $incfile .= $url."index.";
  13. } else {
  14.     $incfile .= substr($url, 0, strlen($url)-4);
  15. }
  16. $incfile .= "php";
  17. $incl = (basename($_SERVER['REQUEST_URI']) != 'index.html')?1:0;
  18. if ($incl && file_exists($incfile)) {
  19.     include($incfile);
  20. } else {
  21.         header("HTTP/1.0 404 Not Found");
  22.     header('HTTP/1.1 404 Not Found');
  23.     header('Status: 404 Not Found');
  24.     include("errors/404.php");
  25. }
  26. include("templates/template.php");
  27. ?>


Если же ругается сервер
CODE (htmlphp):
скопировать код в буфер обмена
  1. [Sun Aug 14 01:15:41 2011] [error] [client 46.61.1.7] ALERT - tried to register forbidden variable '_REQUEST' through GET variables (attacker '46.61.1.7', file '/usr/home/...../site.ru/html/index.php'), referer: http://site.ru/contacts.html

то попробуйте заменить в .htaccess:
это: RewriteRule ^(.*)$ index.php?_REQUEST=$1 [L]
на это: RewriteRule ^(.*)$ index.php?$1 [L]
возможно перестанет ругаться.
 
 Top
ok
Отправлено: 14 Августа, 2011 - 18:47:38
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




tsoi85
Заработало! Выдает ошибку 404 при обращении к (.*)/index.(html|php). Проблема 404 ошибки решена полностью! Работает быстро, стреляет. Радость
Только перестал перенаправлять с www на без него. Зависает, пустой экран (source). Огорчение

(Отредактировано автором: 14 Августа, 2011 - 18:54:24)

 
 Top
White
Отправлено: 14 Августа, 2011 - 18:59:53
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011  
Откуда: Днепропетровск


Помог: 28 раз(а)




ok сделайте
и гляньте на него при обращении www[dot]site[dot]ru


-----
if(time()>1356048000) die();
 
 Top
ok
Отправлено: 14 Августа, 2011 - 19:24:35
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




White
Сделал. При обращении без www выводится site.ru. При обращении с www - пустой экран, view source - пусто.
Error log сервера:
[Sun Aug 14 20:10:18 2011] [error] [client 109.165.95.118] PHP Warning: Cannot modify header information - headers already sent by (output started at /usr/home/...../site.ru/html/index.php:1) in /usr/home/...../site.ru/html/ind ex.php on line 5

Line 5 in /index.php:
header("Location: http://site.ru".$_SERVER['REQUEST_URI']);
Подправил url, чтобы не было спама.

(Отредактировано автором: 14 Августа, 2011 - 19:46:03)

 
 Top
White
Отправлено: 14 Августа, 2011 - 19:46:19
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011  
Откуда: Днепропетровск


Помог: 28 раз(а)




ok т.е. получается что в HTTP_HOST пусто?
попробуйте echo "host: ".$_SERVER['HTTP_HOST'] в самом начале index.php в корне сайта, после него die()
если отобразится "host: " то в HTTP_HOST действительно пусто, тогда следующая модификация:
PHP:
скопировать код в буфер обмена
  1. if(!$_SERVER['HTTP_HOST']) {
  2.   header("HTTP/1.1 301 Moved Permanently");
  3.   header("Location: http://site.ru".$_SERVER['REQUEST_URI']);
  4.   exit;
  5. }


-----
if(time()>1356048000) die();
 
 Top
tsoi85
Отправлено: 14 Августа, 2011 - 19:50:44
Post Id


Новичок


Покинул форум
Сообщений всего: 63
Дата рег-ции: Июнь 2011  


Помог: 10 раз(а)




ok
ok пишет:
[Sun Aug 14 20:10:18 2011] [error] [client 109.165.95.118] PHP Warning: Cannot modify header information - headers already sent by (output started at /usr/home/...../site.ru/html/index.php:1) in /usr/home/...../site.ru/html/ind ex.php on line 5

Или пробел на первой строке файла, или Utf-8 с BOM.
Поэтому заголовок на пятой строке, не может быть отправлен/изменён.
 
 Top
ok
Отправлено: 14 Августа, 2011 - 20:08:22
Post Id


Новичок


Покинул форум
Сообщений всего: 16
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




tsoi85 White
Дико извиняюсь, перед <?php было 4 пробела. Убрал их - все пошло, c www перенаправляется!
Курю логи, вроде эрроров нет. Убрал по совету tsoi85 из .htaccess _REQUEST=
и в эррор логе пусто.
(Добавление)
Пора подводить итоги конкурса. Всем, принявшим участие, большое спасибо. Отдельное и очень большое спасибо White. Его советы очень помогли.
Несомненным и единственным победителем является tsoi85, создавший прекрасный, быстрый и просто очень красивый скрипт, полностью соответствующий техническому заданию.
Прошу уважаемого tsoi85 прислать мне в личку свои платежные реквизиты, WM или ЯД. Мне легче и проще ЯД, но не принципиально.
Еще раз нереально огромное спасибо tsoi85, жду реквизиты.

(Отредактировано автором: 14 Августа, 2011 - 20:24:20)

 
 Top
Страниц (3): « 1 [2] 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB