Как я могу сохранить мои правила перезаписи в базе данных? - PullRequest
3 голосов
/ 02 июня 2009

Я занимаюсь разработкой нового сайта, и я хотел бы сохранить свои правила перезаписи в базе данных, а не прямо в файлах .htaccess.

У меня есть другой сайт, который использует Opensef (http://sourceforge.net/projects/opensef/) с установкой Joomla!), Которая делает это, но я даже не на 100% работаю под капотом.

Как я могу сохранить эти правила в базе данных, запросить их по запросу и перенаправить на чистый URL-адрес, если он найден? Есть ли лучший способ сделать это вместо загрузки файла .htaccess (может быть 1000 записей)?

Спасибо,

Ответы [ 5 ]

6 голосов
/ 02 июня 2009

Вы можете получить mod_rewrite для генерации карты из внешнего источника , такого как выполнение файла PHP или Python, который может получить данные из базы данных и создать карту mod_rewrite.

http://httpd.apache.org/docs/2.0/misc/rewriteguide.html (См. Справа внизу)

Например

RewriteMap    quux-map       prg:/path/to/map.quux.pl

Удачи

2 голосов
/ 12 июня 2009

Предполагая, что все эти страницы в конечном итоге в Joomla, я думаю, что использование .htaccess или mod_rewrite является ошибкой.

Я думаю, вам гораздо лучше узнать, как работает Openserf. Я предполагаю, что у него есть небольшой фрагмент кода, который запускается на ранней стадии для каждого запроса, который запрашивает базу данных и выдает Redirect через PHP, если есть попадание. Еще одним преимуществом этого подхода является то, что Joomla может даже иметь возможность переписывать ссылки на своих страницах, чтобы в первую очередь указывать на чистую версию, сохраняя пользователю ненужное перенаправление

Кстати, именно так и поступает модуль Pathauto в Drupal, и я использую его все время на некоторых довольно больших сайтах с тысячами страниц.

1 голос
/ 10 июня 2009

Я думаю, что лучший подход к использованию правил, хранящихся в базе данных:

  • Храните правила в своей базе данных через админ-панель вашего сайта.
  • Затем, после обновления базы данных, создайте новый .htaccess, используя правила в БД, используя свое серверное языковое решение.
  • Заменить старый .htaccess на новый.

Это позволяет избежать нагрузки на сервер. Это похоже на решение Эйдена Белла.

0 голосов
/ 12 июня 2009

То, что вам, вероятно, нужно, - это одно правило перезаписи, которое обрабатывает каждый неизвестный запрос, а затем передает его небольшому сценарию, который будет обрабатывать запросы и генерировать перенаправления. Можно даже полностью пропустить правило перезаписи и использовать директиву Apache ErrorDocument для передачи неизвестных URL-адресов в сценарий.

Вы немного разбираетесь в деталях того, что представляет собой этот «новый сайт», но, возможно, вы захотите создать себе Front Controller для приложения и заставить его позаботиться обо всех входящих URL-адрес. Многие (большинство?) Фреймворки веб-приложений используют этот подход.

0 голосов
/ 02 июня 2009

Возьмите UrlRewriteFilter , разделите его на использование БД и используйте его в Tomcat вместо Apache.

Tomcat - прекрасный веб-сервер, который может выполнять множество функций, которые может выполнять Apache (например, FastCGI для PHP), и писать подобные вещи для него тривиально по сравнению с написанием таких вещей для Apache.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...