2016-05-16 60 views
1

我希望所有传入流量都通过PHP脚本传输,只需将脚本上传到服务器并在我的.htaccess中添加几行即可。是否 - 或者类似 - 可能吗?基于PHP脚本结果的.htaccess重定向可以吗?

例如为:

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

回答

1

.htaccessPHP脚本之前被解雇。查看.htaccess作为您的Web服务器(Apache)设置的扩展。您将无法“发送”.htaccess,因为它是服务器的配置文件,而不是引擎本身。 Conversly你可以使用PHP的原生header redirect

PHP

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

也许我可以让Apache做一个子请求,这样一来,它首先会对脚本进行内部重定向,然后根据脚本的返回值(如果需要)进行外部重定向 - 可以存储在服务器端 - 或环境变量。这是不可能的吗? –

+0

RewriteMap - 我不太了解 - 似乎也很有希望。除了它不能在.htaccess上下文中使用的事实。 –

+0

这个也很有趣,我会详细阅读它:_%{LA-F:variable}可以用来执行一个内部的(基于文件名的)子请求,以确定变量的最终值。大多数情况下,这与上面的LA-U相同。(来源:[httpd.apache.org](http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecond)) –

2

非常类似的东西可以使用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. 使用的header("Location: URL)方法将用户重定向到任何URL作为由@Zak提及(例如http://myhost.com/file_area/my_file.jpg
    3. 直接从磁盘读取文件并将数据返回给用户。 (Example code

看看在mod_rewrite先进示范页面。根据你需要做什么,可能有其他选择。

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

+1

我需要一个解决方案,其中Apache使最后的重定向,而不是PHP。我有很多现有的RewriteRules,我不想用PHP实现。 (我想添加的新逻辑对于Apache来说太复杂了,所以在这种情况下我需要PHP。) –

+0

hmm。请参阅:http://stackoverflow.com/a/1390754/6287702有可能这样的虚拟重定向(即缺少ptoto +主机)可以通过mod_rewite触发子请求。目前无法测试此功能。最糟糕的情况下,你可以代理你的PHP脚本的后面,并通过答复。但是越来越丑陋了。 – Wafflecode