htaccess переписать на URL без общего шаблона - PullRequest
7 голосов
/ 03 июня 2011

В новом проекте веб-сайт имеет набор статических HTML-страниц.Владелец должен преобразовать их в динамические.Каждая страница имеет: текстовый раздел, небольшую фотографию и несколько ссылок на другие страницы, связанные с этой страницей.

Все это я могу поместить в базу данных и создать динамическую страницу (php).

Моя проблема в том, что каждая статическая страница уникальна - в URL нет общего шаблона.И там 860 таких страниц на данный момент.У меня может быть один URL-адрес, например:

folder1/folder2/item1.htm
folder1/folder2/folder3/item2.htm
folder1/folder2/folder2-fodler3/item3.htm

Эти 3 наиболее распространенных паттерна на сегодняшний день (около 860 из 860).

Каждое имя папки на самом деле является категорией / подкатегорией / ключевым словом, которое я могу использовать для определения свойств моего элемента.Как правило, первые 2 папки (папка 1 и папка 2) являются категорией и подкатегорией продукта, а следующие папки (папка 3 и после этого) определяют раздел (если есть) элемента.Я надеюсь, что это имеет смысл.

Итак, одна мысль состоит в том, чтобы использовать старый статический url в качестве базы данных и сопоставлять его для обслуживания контента, что-то вроде:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /script.php?path=$1 [L]

IПодумайте, что помещение этого правила в самый конец моих правил перезаписи гарантирует, что все остальные перезаписи не будут затронуты.

Является ли этот подход целесообразным?ИЛИ есть другой способ?Что-то более надежное / безопасное / легкое?

Ответы [ 2 ]

2 голосов
/ 01 ноября 2011

Метод, который вы описываете, довольно распространен и хорошо:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /script.php?path=$1 [L]

Вы можете облегчить это, проанализировав исходную строку запроса в вашем PHP-скрипте напрямую, что является более прямым. Посмотрите, что ваш сервер предлагает в суперглобальном массиве $_SERVER PHP, например, запустить var_dump($_SERVER);. Вы уже найдете что-то похожее на $_GET['path'], которым вы пользуетесь, обычно это более функционально совместимо:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) /script.php [L]

Кроме того, в зависимости от версии сервера apache его можно упростить до:

FallbackResource /script.php

Это избавит вас от дополнительной проверки файлов в RewriteCond, которую вы используете в настоящее время.

0 голосов
/ 11 августа 2012

Просто используйте

RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/script.php?path=$1 [L]
...