从.htaccess文件中运行PHP代码?

7

假设我有一个需要将URL传递给PHP函数并检索值以确定新目标的重写?有没有办法做到这一点?

谢谢。

更新:

感谢大家迄今为止的帮助...但我仍然遇到麻烦,但我会展示我的代码:

.htaccess

#I got the file path by echoing DOCUMENT_ROOT and added the rest.
RewriteMap fixurl prg:/var/www/vhosts/mydomain.com/httpsdocs/domain_prototype/code_base/url_handler.php

RewriteEngine On
RewriteRule (.*) ${fixurl:$1} [PT]

PHP:

set_time_limit(0); # forever program!
$keyboard = fopen("php://stdin","r");
while (1) {
        $line = trim(fgets($keyboard));
        print "www.google.com\n";  # <-- just test to see if working.
}

但我遇到了500内部服务器错误,我不确定是我的.htaccess文件还是PHP代码出错了?

4个回答

11
有一种叫做RewriteMap的东西。您可以调用一个可执行脚本,该脚本将返回要重写的URL。请参阅此文章以获取更多信息和示例(使用Perl编写,但完全适用于任何其他语言):http://www.onlamp.com/pub/a/apache/2005/04/28/apacheckbk.html。注意事项摘要:
- 必须运行读取STDIN循环(即,在接收到URL后不要退出) - 必须打印带有换行符的要重写的URL - 必须可被Apache用户读取和执行
这是创建映射的方法。
RewriteMap fixurl prg:/usr/local/scripts/fixit.php

现在我们可以在 RewriteRule 中使用它:

RewriteEngine On
RewriteRule (.*) ${fixurl:$1} 

编辑:关于内部服务器错误。最有可能的原因是Gumbo提到的,RewriteMap不能在.htaccess中使用。您可以在.htaccess中使用RewriteRule,但只能在服务器配置或虚拟主机配置中创建它。要确定,请检查错误日志。

所以,唯一的PHP / .htaccess解决方案是重写所有内容到一个特定的PHP程序中,该程序使用Location标头进行检查和重定向。类似这样:

RewriteRule (.*) proxy.php?args=$1 [QSA]

然后,在proxy.php中进行操作。

<?php
      $url = get_proper_destination($QUERY_STRING); #args will have the URI path, 
                                                    #and, via QSA you will have
                                                    #the original query string
      header("Location: $url");
?>

3

是的,你需要一个RewriteMap,它属于外部重写程序类型。


2
我会将URL传递给PHP页面,然后使用PHP头选项进行最终重定向。
header("Location: new-page.php");

如果你不想进行重定向,也可以包含你想要的页面。我发现这比使用RewriteMap更灵活一些。
希望这有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接