【问题标题】:How can I store my Rewrite Rules in a database?如何将我的重写规则存储在数据库中?
【发布时间】:2009-06-13 03:30:59
【问题描述】:

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

我有另一个使用 Opensef (http://sourceforge.net/projects/opensef/) 和 Joomla 的网站!正在执行此操作的安装,但我什至无法 100% 了解它在引擎盖下的工作原理。

如何将这些规则存储在数据库中,根据请求查询它们并在找到时重定向到干净的 URL?有没有更好的方法来代替加载 .htaccess 文件(可能有 1000 个条目)?

谢谢,

【问题讨论】:

  • 你知道这会对你的页面响应时间和服务器负载有什么影响吗?您的规则适用于所有内容(图像、样式表、脚本等),因此您可以每页处理超过 20,000 条规则。我认为你应该重新考虑你的策略。

标签: mysql apache .htaccess url-rewriting


【解决方案1】:

您可以让 mod_rewrite 从外部源生成映射,例如执行可以从数据库中获取数据并创建 mod_rewrite 映射的 PHP 或 Python 文件。

http://httpd.apache.org/docs/2.0/misc/rewriteguide.html (见右下角)

例如

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

祝你好运

【讨论】:

  • 请记住,这个程序需要快速——它会在通过您的网络服务器的每个请求上运行,甚至是图像和 CSS 文件。
  • Apache/Rewrite 加载地图并将其缓存到 SIGHUP,如果我记得的话。
【解决方案2】:

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

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

顺便说一句,这就是 Drupal 中的 Pathauto 模块的工作方式,我一直在一些拥有数千个页面的大容量网站上使用它。

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      获取UrlRewriteFilter,将其销毁以使用数据库,并在 Tomcat 而不是 Apache 中使用它。

      Tomcat 是一个很好的 Web 服务器,可以做很多 Apache 可以做的事情(比如 PHP 的 FastCGI),与为 Apache 编写类似的东西相比,为它编写这样的东西是微不足道的。

      【讨论】:

        【解决方案5】:

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

        您对这个“新网站”的细节非常了解,但是,您可能想考虑为应用程序建立一个Front Controller 并让它处理所有传入的 URL。许多(大多数?)网络应用程序框架都采用这种方法。

        【讨论】:

          猜你喜欢
          • 2023-04-10
          • 2011-05-22
          • 1970-01-01
          • 2015-12-13
          • 1970-01-01
          • 2018-08-27
          • 1970-01-01
          • 1970-01-01
          • 2018-08-02
          相关资源
          最近更新 更多