#.htaccess #rewrite
#.htaccess #url-перезапись
Вопрос:
В новом проекте веб-сайт имеет набор статических HTML-страниц. Владельцу необходимо преобразовать их в динамические. На каждой странице есть: текстовый раздел, небольшая фотография плюс несколько ссылок на другие страницы, связанные с этой.
Все это я могу поместить в базу данных и создать динамическую страницу (php).
Моя проблема в том, что каждая статическая страница уникальна — в URL нет общего шаблона. И на данный момент таких страниц 860. У меня может быть один URL, подобный:
folder1/folder2/item1.htm
folder1/folder2/folder3/item2.htm
folder1/folder2/folder2-fodler3/item3.htm
На данный момент эти 3 шаблона являются наиболее распространенными (обслуживают около 650 URL-адресов из 860).
Имя каждой папки на самом деле является категорией / подкатегорией / ключевым словом, которое я могу использовать для определения свойств моего элемента. Как правило, первые 2 папки (folder1 и folder2) представляют собой категорию и подкатегорию продукта, в то время как следующие папки (папка 3 и после нее) определяют раздел (если таковой имеется) товара. Я надеюсь, что это имеет смысл.
Итак, одна из идей состоит в том, чтобы использовать старый, статический URL-адрес в качестве файла базы данных и сопоставить его для обслуживания содержимого, что-то вроде:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /script.php?path=$1 [L]
Я думаю, что размещение этого правила в самом конце моих правил перезаписи гарантирует, что все остальные перезаписи не будут затронуты.
Целесообразен ли такой подход? ИЛИ есть другой способ? Что-то более надежное / безопасное / легкое?
Комментарии:
1. По вашему описанию файлы выглядят небольшими и относительно хорошо структурированными. Более долгосрочным решением может быть синтаксический анализ файлов, сохранение значений в базе данных и предоставление данных на динамической странице. Это сделало бы все это действительно динамичным, то есть содержимое и презентацию было бы легко изменить. (Я только что увидел, что это не совсем новый вопрос. В любом случае)
Ответ №1:
Метод, который вы описываете, довольно распространен и хорошо:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /script.php?path=$1 [L]
Вы можете упростить задачу, проанализировав исходную строку запроса напрямую в вашем PHP-скрипте, что является более прямым. Посмотрите, что предлагает ваш сервер в $_SERVER
суперглобальном массиве PHP, например run var_dump($_SERVER);
. Вы уже нашли что-то похожее на ваше, $_GET['path']
которое вы используете, это, как правило, более совместимо:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /script.php [L]
Далее, в зависимости от версии сервера apache, это может быть дополнительно упрощено как:
FallbackResource /script.php
Это избавляет вас от дополнительной проверки файла, который RewriteCond
вы используете в данный момент.
Ответ №2:
Просто используйте
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/script.php?path=$1 [L]
Комментарии:
1. У этого правила перезаписи нет цели (если только вы не хотите переписать URI на
[L]
)