Проблема с генерацией страниц

Статус
В этой теме нельзя размещать новые ответы.

stev

Старатель
Регистрация
23 Окт 2007
Сообщения
174
Реакции
13
Пишу динамический дорген с квази-кэшированием (т.е. если при обращении пользователя страницы нет на сервере, то запрос с помощью mod_rewrite перенаправляется на генератор и страница генерируется в виде html, а также сохраняется на сервере).

.htaccess
PHP:
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
RewriteRule ^.*$ /pagegen.php [NC,L]

pagegen.php
PHP:
<?

//Определяем кейворд из адреса. Если генерим индексную страницу - выбираем кейворд каким-либо другим способом на твоё усмотрение
if( preg_match('#/?([^/]+)\.html$#' , $_SERVER['REQUEST_URI'],$parts) )
{	
	$name = $parts[1];	
	$filename = $name.'.html';	
	$keyword = str_replace("-"," ",$name);
}  	
else if ($_SERVER['REQUEST_URI']=="" || $_SERVER['REQUEST_URI']=="/")
{	
	echo('INDEX PAGE');
	$filename = "index.html";	
	$keyword = "INDEX KEYWORD";
}

//Генерим текст страницы
$text = 'Страница про '.$keyword.'';

//Сохраняем файл
file_put_contents($filename,$text);

include ($filename);

?>

Все нормально работает, кроме генерации index.html при запросе вида Для просмотра ссылки Войди или Зарегистрируйся или Для просмотра ссылки Войди или Зарегистрируйся Подскажите в чем косяк? Почему не обрабатывается это условие:
PHP:
else if ($_SERVER['REQUEST_URI']=="" || $_SERVER['REQUEST_URI']=="/")

??

Жду Ваших комментариев.
 
Скорее всего у тебя косяк в mod_rewrite - оно просто не перекидывает на нужную страницу.

А не перекидывает оно потому, что пустой урл - это и есть папка htdocs, а она существует, следовательно условие %{REQUEST_FILENAME} -d
выполняется, следовательно рерайт не запускается.

Добавь в .htaccess в начале

RewriteRule ^$ /index.html [NC]

чтоб оно все запросы на / редиректило на /index.html, а там уже и второй RewriteRule подхватится..
 
  • Нравится
Реакции: stev
Спасибо! Заработало, но при обращении к index.html происходит его постоянная перезапись. Это конечно мелочь, но хотелось бы придерживаться поставленной цели:
запрос, генерация файла, еще запрос, открытие ранее сгенерированного файла.

Как еще можно реализовать данный алгоритм без перезаписи?

Вроде бы разобрался :ah:
Добавить нужно такую строку
RewriteRule ^$ /index.html [NC,L]
 
А не проще ли всегда направлять на скрипт, который определяет наличие сгенерированной страницы и либо отдаёт её, либо генерирует и отдаёт?
 
Не проще, потому что пустой процесс с php отжирает минимум 300кб памяти, а делов ему - только проверить что файл есть и выплюнуть его в stdout.

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

Добавлено через 38 секунд
Еще и с докачечкой :)
 
Оптимизация раньше времени является злом.
 
Так это не "оптимизация раньше времени". Это вообще не оптимизация.

Это скрипт на php из трех строчек, против других трех строчек в .htaccess

Два решения одной проблемы. Оба пути приведут к желаемому результату. Оба примерно равны по усилиям. Но при этом один заметно тормознутее другого. "Так зачем платить больше?" (с)
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху