[英]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
警告摘要:
这是创建地图的方法
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更灵活一些。
希望这可以帮助!
请注意, RewriteMap
指令只能在服务器配置或虚拟主机上下文中使用 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.