【问题标题】:Can .htaccess redirect based on a PHP script result?.htaccess 可以根据 PHP 脚本结果重定向吗?
【发布时间】:2016-09-12 21:11:44
【问题描述】:

我希望所有传入流量都通过 PHP 脚本进行隧道传输,只需将脚本上传到服务器并在我的 .htaccess 中添加几行即可。是否 - 或类似的 - 可能?

例如:

  1. 我访问了一个页面。
  2. PHP 脚本获取整个 URL,并将重定向目标 URL 返回给 .htaccess。
  3. .htaccess 仅当 URL 已被 PHP 脚本修改时才会重定向。

【问题讨论】:

    标签: php apache .htaccess redirect


    【解决方案1】:

    使用 Apache 的 mod_rewrite 更传统的规则可以完成非常相似的事情。或者正如您在对话中提到的@Zak 的回答,可能使用了内部重定向。

    这是一个示例序列:

    1. 用户访问页面(例如http://myhost.com/my_area/my_file.jpg
    2. .htaccess 配置为将/myarea(甚至/)的所有 请求传递给php 脚本。 (例如handle-url.php)(Example code
    3. handle-url.php 中的逻辑现在可以执行以下任何操作:
      1. 返回错误
      2. 使用@Zak 提到的header("Location: URL) 方法将用户重定向到任何网址(例如http://myhost.com/file_area/my_file.jpg
      3. 直接从磁盘读取文件并将数据返回给用户。 (Example code)

    查看mod_rewrite 的高级示例页面。根据您具体需要做什么,可能还有其他选择。

    例如,On-the-fly Content-Regeneration 可能会有所帮助。可能FallbackResource

    【讨论】:

    • 我需要一个解决方案,让 Apache 进行最后一次重定向,而不是 PHP。我有大量现有的 RewriteRules,我不想在 PHP 中实现。 (而且我要添加的新逻辑对于 Apache 来说太复杂了,所以在这种情况下我需要 PHP。)
    • 嗯。请参阅:stackoverflow.com/a/1390754/6287702 这样的虚拟重定向(即缺少 ptoto+host)可能会通过 mod_rewite 触发子请求。目前无法对此进行测试。最坏的情况,您可以代理您的 php 脚本的背面并通过回复。但这越来越难看。
    【解决方案2】:

    .htaccessPHP 脚本之前被触发。将 .htaccess 视为 Web 服务器 (Apache) 设置的扩展。您将无法向.htaccess“发送”某些内容,因为它是服务器的配置文件,而不是引擎本身。反过来你可以使用PHP的原生header redirect

    PHP

    header('Location: http://www.example.com/');
    

    【讨论】:

    • 也许我可以让 Apache 做一个子请求,以便首先它对脚本进行内部重定向,然后根据脚本的返回值进行外部重定向(如果需要),这可能是存储在服务器或环境变量中。不可能吗?
    • RewriteMap - 我不太了解 - 似乎也很有希望。除了它不能在 .htaccess 上下文中使用。
    • 这个也很有趣,我会详细了解它:%{LA-F:variable} 可用于执行内部(基于文件名的)子请求,确定变量的最终值。大多数情况下,这与上面的 LA-U 相同。(来源:httpd.apache.org
    猜你喜欢
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 2011-02-13
    • 1970-01-01
    • 2011-08-30
    • 2012-05-19
    • 2014-09-19
    • 2019-01-30
    相关资源
    最近更新 更多