繁体   English   中英

从.htaccess运行PHP代码?

[英]Run PHP code from .htaccess?

假设我有一个重写,需要将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中是否有错误?

有一种叫做RewriteMap的东西。

您可以调用一个可执行脚本来返回要重写的URL。

查看本文以获取更多信息和示例(在Perl中,但完全适用于任何其他语言):

http://www.onlamp.com/pub/a/apache/2005/04/28/apacheckbk.html

警告摘要:

  • 必须运行读取STDIN循环(即,在收到URL后不要退出)
  • 必须打印URL以重写为WITH尾随换行符
  • 必须是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");
?>

是; 你需要一个外部重写程序的RewriteMap

我要做的是将URL传递给PHP页面,然后使用PHP标头选项进行最后的重定向。

header("Location: new-page.php");

如果您不希望它重定向,您还可以包含所需的页面。 我发现这比使用RewriteMap更灵活一些。

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM