我正在开发一个新网站,我想将重写规则存储在数据库中,而不是存储在.htaccess文件中。
我有另一个使用Opensef(http://sourceforge.net/projects/opensef/)和Joomla的网站!这样做的安装,但我甚至不知道它是如何在引擎盖下工作的。
如何将这些规则存储在数据库中,根据请求查询这些规则,如果找到则重定向到干净的URL?有没有更好的方法来执行此操作而不是加载.htaccess文件(可能有1000个条目)?
谢谢,
答案 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)
我认为使用存储在数据库中的规则的最佳方法是:
这可以避免服务器负载。它与Aiden Bell解决方案类似。
答案 3 :(得分:0)
抓住UrlRewriteFilter,使用数据库,然后在Tomcat而不是Apache中使用它。
Tomcat是一个优秀的Web服务器,可以完成Apache可以做的很多事情(比如用于PHP的FastCGI),并且与为Apache编写这样的东西相比,写这样的东西是微不足道的。
答案 4 :(得分:0)
你可能想要的是一个单一的重写规则来处理每个未知的请求,然后将其传递给一个小脚本,该脚本将处理查找&生成重定向。您甚至可以完全跳过重写规则,并使用Apache ErrorDocument directive将未知的URL传递到脚本中。
您对这个“新网站”的详细信息一直很渺茫,但是,您可能需要考虑为自己构建一个Front Controller应用程序&让它处理所有传入的URL。许多(大多数?)Web应用程序框架采用这种方法。