mod_rewrite (?) и кеширование
http://wiki.codemongers.com/NginxHttpProxyModule#proxy_store
в апаче надо смотреть на постусловия RewriteRules, точно не помню, но во всех манах есть.
в nginx примерно так: в апаче надо смотреть на постусловия RewriteRules, точно не помню, но во всех манах есть.
RewriteCond %{REQUEST_FILENAME} !-F
RewriteRule ^.*$ /generate?%{REQUEST_FILENAME}
как-то так. наверняка штуки три синтаксических ошибки.
http://www.egoroff.spb.ru/portfolio/apache/mod_rewrite.html#...
Не.. как-то не так... Потом помучаюсь...
про [флаги] не забыл?
При этом generate должен этот файл создать сам, насколько я понимаю
Пока в них не силен. Сейчас стоит
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule index.html index.php [L]
2 : точно так. Он и создает, когда просто перенаправление выставить. Но при рефреше он его опять пересоздает - условие не получается написать
Он и создает, когда просто перенаправление выставить. Но при рефреше он его опять пересоздает - условие не получается написатьэээ. при рефреше дергается свежесозданный index.html
При этом generate должен этот файл создать сам, насколько я понимаюну да, это ж классика. в мемкеш тоже бекенд кладет обычно.
ну да, это ж классика. в мемкеш тоже бекенд кладет обычно.Я в том смысле, что в принципе веб-сервер может сам отдаваемый результат в файл класть. Думаю, если поставить nginx как прокси, то его можно подобным образом настроить. А в апаче с модреврайтом надо в скрипте результат и в вывод выдать, и в файл самому его записать.
должен дергаться. Точнее, хочу этого добиться. Но вот как-то не очень
Думаю, если поставить nginx как прокси, то его можно подобным образом настроить.ага, по моей первой ссылке показано, как это сделать.
я просто апач давно не видел, уже не помню, как это делается там. =)
и вообще, как тут верно заметил, проксировать надо nginx-ом.
и настраивается он проще, потому что там говна не наворочено всякого.
Ладно... Видимо, буду делать через жеппу. Это вообще не обязательно - там пока 100 человек в день ходит, но хотелось вот сделать
<Files ~ "^generate.php">
Order allow,deny
Deny from all
</Files>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ generate.php?%{REQUEST_FILENAME}
generate.php:
<?
exec("echo test > {$_SERVER['QUERY_STRING']}");
passthru("cat {$_SERVER['QUERY_STRING']}");
должно работать
могу еще один повод для смеха сказать: делается пока локально на виндовой машине
ну значит echo и cat меняем на put_file_contents и get_file_contents :-)
Хотел, чтобы, если существует file.html, скрипт вааще не запускался
просто в первый раз он должен создать файл и отдать его содержимое.
Но такое вот действо, как ты написал, выдает 400
File does not exist: C:/path/index.html
может rewrite не работает?
работает
<Files ~ "^index.php">
Order allow,deny
Allow from all
</Files>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*\.html$ "C:/path/index.php?%{REQUEST_FILENAME}"
GET /tmp%0d%0arm%20-rf%20%2f HTTP/1.0
или
GET /tmp%0d%0acat%20%2fetc%2fpasswd%20%3e%2fvar%2fwww%2fhtdocs%2ftmp HTTP/1.0
?
рискну предположить, что будет много минусиков.
Т.е. если подключатся 2 клиента одновременно, а файла ещё не будет. Они будут в одно и то же место писать одновременно?
нет, о таком я еще не думал. И еще не надо.
<?
$name = $_SERVER['QUERY_STRING'];
$content = "$name (test)";
file_put_contents( $name, $content);
echo "$content (from script)";
только что проверил под виндой - скрипт вызывается только для отсутствующих файлов.
Оставить комментарий
uncle17
афаиу, элементарная вещь, просто сталкиваться не приходилось.Натыкался на это где-то, но найти не могу. Помню, что очень просто делается.
Что прописать в .htaccess, чтобы, например:
при обращении к /index.html проверяется, есть ли он. Если есть, отдается он.
Если нет, запускается скрипт, допустим, generate?filename=index, который его генерит, а затем отдает.