【问题标题】:Rewrite urls using Apache PHP使用 Apache PHP 重写 url
【发布时间】:2013-05-13 18:59:19
【问题描述】:

我有许多 url 存储在数据库中,因此我没有在 .htaccess 中为每个 url 添加重写规则,而是在 htaccess 中使用以下代码通过以下 ReWrite 将控制权交给 PHP 代码Apache 中的规则:

RewriteRule ^.*$ ./index.php

数据库中提到的一个url,有一个对应的原始url。但是,当我必须通过相应的原始 url 提供从 DB 获取的 url 的内容时,就会出现棘手的情况,而在 .htaccess 中编写了 ReWrite 规则。一种解决方案是在 PHP 中对从 DB 中获取的 url 实现与在 Apache 中为原始 url 编写的相同的重写规则,但是,这样的原始 url 的数量是巨大的。

因此,如果可能的话,很高兴知道一个解决方案,该解决方案可以在 PHP 内部处理完成后通过 Apache 中提到的 ReWrite 规则执行流程。

【问题讨论】:

  • 不需要点 RewriteRule ^.*$ /rewriteurl.php [L]。我猜您必须使用/rewriteurl.php 根据请求查找原始 URL。事实上,必须在 PHP 中使用 $_SERVER['REQUEST_URI'] 来获取请求。或者 $_SERVER['QUERY_STRING'],如果您将 URI 路径作为规则中的查询传递。
  • @faa,我正在通过 rewriteurl.php(PHP 代码)提供额外的重写规则,而不是尝试重写 /rewriteurl.php url

标签: php .htaccess rewrite


【解决方案1】:

如果您可以访问主 httpd.conf,您可以使用用 PHP 编写的 RewriteMap

除此之外,您无法将控制权从 PHP 交还给 Apache,因此 Apache 可以进一步处理它,而不是在同一个请求中。您可以从 PHP 进行 30 倍的重写,让 Apache 处理下一个请求。

【讨论】:

  • 另一种可能性是在 Apache 中创建一个输出过滤器,如果它在这种情况下工作,仍然会查看 ReWriteMap
  • 感谢您的建议..它确实从我探索过的所有其他替代方案中脱颖而出..
【解决方案2】:

基本重写,而是创建一个 apache 规则将所有 404 错误重定向到一个 php 文件,该文件将是您的 url 处理程序,使用请求的 url 在您的数据库中的 url 列表中查找,将原始 url 返回到您的处理程序,从那里进行重定向或获取页面内容服务器端/ajax 页面/iframe,无论您喜欢哪个,如果请求的 url 不在您的列表中,则显示您的自定义 404 页面,这会杀死两只鸟。

设置 404 页面: http://www.404-error-page.com/404-create-a-custom-404-error-page.shtml

【讨论】:

  • 我了解使用 404 事物的技术,但是,它最终会导致从服务器端的另一个 curl 请求中获取内容,这将在使用 Session 变量的情况下中断
  • 使用 iframe?在以 src 作为正确 url 的 404 处理程序中,同时维护两者。开销是 iframe 的辅助 http 获取,我个人会避开它。
  • 在考虑 SEO 时,iframe 是一个糟糕的解决方案。
猜你喜欢
  • 2011-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-10
  • 2017-04-20
  • 1970-01-01
  • 2011-10-21
相关资源
最近更新 更多