如何将重写规则存储在数据库中?

时间:2009-06-01 20:13:49

标签: mysql apache .htaccess url-rewriting

我正在开发一个新网站,我想将重写规则存储在数据库中,而不是存储在.htaccess文件中。

我有另一个使用Opensef(http://sourceforge.net/projects/opensef/)和Joomla的网站!这样做的安装,但我甚至不知道它是如何在引擎盖下工作的。

如何将这些规则存储在数据库中,根据请求查询这些规则,如果找到则重定向到干净的URL?有没有更好的方法来执行此操作而不是加载.htaccess文件(可能有1000个条目)?

谢谢,

5 个答案:

答案 0 :(得分:6)

您可以使用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

祝你好运

答案 1 :(得分:2)

假设所有这些页面最终都在Joomla中,我认为使用.htaccess或mod_rewrite是一个错误。

我认为你学习Openserf的工作方式会好得多。我想它有一小段代码可以提前运行查询数据库的每个请求,如果有命中则通过PHP发出重定向。这种方法的另一个优点是,甚至可以让Joomla在其页面上重写链接以指向干净版本,从而为用户节省不必要的重定向

顺便说一句,这就是Drupal中的Pathauto模块如何做到这一点,而且我一直在一些包含数千页的大量网站上使用它。

答案 2 :(得分:1)

我认为使用存储在数据库中的规则的最佳方法是:

  • 通过您网站的管理面板将规则存储在您的数据库中。
  • 然后在更新数据库后,使用服务器端语言解决方案使用DB中的规则生成新的.htaccess。
  • 用新的替换旧的.htaccess。

这可以避免服务器负载。它与Aiden Bell解决方案类似。

答案 3 :(得分:0)

抓住UrlRewriteFilter,使用数据库,然后在Tomcat而不是Apache中使用它。

Tomcat是一个优秀的Web服务器,可以完成Apache可以做的很多事情(比如用于PHP的FastCGI),并且与为Apache编写这样的东西相比,写这样的东西是微不足道的。

答案 4 :(得分:0)

你可能想要的是一个单一的重写规则来处理每个未知的请求,然后将其传递给一个小脚本,该脚本将处理查找&生成重定向。您甚至可以完全跳过重写规则,并使用Apache ErrorDocument directive将未知的URL传递到脚本中。

您对这个“新网站”的详细信息一直很渺茫,但是,您可能需要考虑为自己构建一个Front Controller应用程序&让它处理所有传入的URL。许多(大多数?)Web应用程序框架采用这种方法。