1 Востаннє редагувалося Адріян Ігорович (07.07.2012 19:41:45)

Тема: Генерування html сторінок без фізичного створення їх на сервері

Привіт. 
Якщо ви працювали з cms DataLife Engine, ви могли побачити, що там генеруються html сторінки, але при тому їх фізично на сервері немає.
Можливо хтось знає як це робиться? Підкажіть будь ласка. Буду дуже вдячний.

Подякували: Replace1

2 Востаннє редагувалося Replace (07.07.2012 20:41:14)

Re: Генерування html сторінок без фізичного створення їх на сервері

в DataLife Engine, всі запити, крім статичних файлів перенаправляються в index.php за допомогою ModRewrite правила якого записані в файлі .htaccess. Зазвичай вся необхідна інформація потрапляє в масив $_GET.

Приклад рядка з DataLife Engine:
RewriteRule ^page/(.*)$ index.php?cstart=$1 [L]

Тобто, наприклад, запит http://host/page/information.html буде перенаправлений в index.php і в $_GET['cstart'] буде записано information.html і далі за допомогою різноманітних перевірок та запитів до бази даних генерується зміст сторінки.

update: Не до кінця прочитав. Робиться це так:
Створюється файл .htaccess зі змістом:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f       #якщо це не існуючий файл
    RewriteCond %{REQUEST_FILENAME} !-d      #якщо це не існуюча директорія
    RewriteRule ^(.*)$ index.php?page=$1 [L]     # в інших випадках перенаправляємо на index.php, в параметр page записуємо сторінку
</IfModule>

<IfModule !mod_rewrite.c>
    ErrorDocument 404 /index.php # якщо немає ModRewrite
</IfModule> 

В index.php:

<?php

// записуємо в змінну $page значення з масиву $_GET
if (isset($_GET['page'])
    $page = $_GET['page'];
else
    $page = 'home'; // якщо: /

// обробка змінної
if ($page == 'home') {
// ...
} else if ($page == 'info') {
// ...
} else if ($page == 'contacts') {
//...
// і т.д.
} else {
// сторінка не знайдена
}

3 Востаннє редагувалося Адріян Ігорович (07.07.2012 22:36:48)

Re: Генерування html сторінок без фізичного створення їх на сервері

Дякую за оперативну відповідь, але я не до кінця зрозумів.
Наприклад я звернувся до сторінки home.html
як наприклад вивести повідомлення якесь?

4

Re: Генерування html сторінок без фізичного створення їх на сервері

Звернутись просто http://host/home.html

Інше це вже повністю пов'язано з php:

<?php
if ($page == 'home.html') {
echo 'home';
}
?>
Подякували: ost.bregin20141

5

Re: Генерування html сторінок без фізичного створення їх на сервері

Більш практичний приклад:

.htaccess:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?page=$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
    ErrorDocument 404 /index.php
</IfModule> 

index.php:

<?php
if (isset($_GET['page']))
    $page = $_GET['page'];
else
    $page = 'home.html';    
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title><?php echo $page; ?></title>
    </head>
    <body>
        <?php 
            if ($page == 'home.html') {
        ?>
        <h1>Головна сторінка</h1>
        <p>Інформація на головній сторінці</p>
        <?php
            } else if ($page == 'about.html') {
        ?>
        <h1>Про сайт</h1>
        <?php
            } else {
        ?>
        <h1>Не знайдено</h1>
        <p>Сторінка відображається у всіх інших випадках</p>
        <?php
            }
        ?>
    </body>
</html>

Приклади звертань:
http://host/
http://host/home.html
http://host/about.html
http://host/whatelse.html

Подякували: Адріян Ігорович1

Re: Генерування html сторінок без фізичного створення їх на сервері

Replace, ВЕЛИКЕ спасибі за допомогу!
Все працює!