Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将AuthUserFile替换为.htaccess中的自定义PHP脚本_Php_Apache_.htaccess_Openid - Fatal编程技术网

将AuthUserFile替换为.htaccess中的自定义PHP脚本

将AuthUserFile替换为.htaccess中的自定义PHP脚本,php,apache,.htaccess,openid,Php,Apache,.htaccess,Openid,每次我需要一个完整目录的快速而肮脏的密码保护时,我都会通过.htaccess文件使用HTTP身份验证(大多数情况下,是为了隐藏我安装供私人使用的第三方应用程序)。现在我已经编写了一些PHP代码,用OpenID替换本地密码。这使我能够在PHP站点中摆脱HTTP身份验证。然而,我仍在尝试找出一个可以在非PHP内容(从第三方程序到随机内容)中使用的技巧 默认情况下,Apache似乎不支持使用自定义脚本进行身份验证(无论我做什么,它都应该在我的宿主提供程序中工作)。这就留下了一个显而易见的解决方案,即使

每次我需要一个完整目录的快速而肮脏的密码保护时,我都会通过
.htaccess
文件使用HTTP身份验证(大多数情况下,是为了隐藏我安装供私人使用的第三方应用程序)。现在我已经编写了一些PHP代码,用OpenID替换本地密码。这使我能够在PHP站点中摆脱HTTP身份验证。然而,我仍在尝试找出一个可以在非PHP内容(从第三方程序到随机内容)中使用的技巧

默认情况下,Apache似乎不支持使用自定义脚本进行身份验证(无论我做什么,它都应该在我的宿主提供程序中工作)。这就留下了一个显而易见的解决方案,即使用
mod_rewrite
通过检查凭据并读取目标文件的PHP脚本来路由所有内容,但1)它看起来像一个性能杀手2)它会干扰动态内容,例如其他PHP脚本


我想知道是否有办法调整路由器方法,使脚本不需要发送文件,或者我是否忽略了其他方法。有什么想法吗?

我认为你的
mod_rewrite
方法是唯一的方法,但是你可以不使用
readfile()
(我想你是这样的,根据你所说的
,它会干扰动态内容,比如其他PHP脚本
),你可以只
包含它们,因此,原始文件被直接写入输出,PHP代码被执行。

您可以使用PHP HTTP-AUTH


如果OpenID是你所需要的,考虑使用Apache的/Mp的MuthAuthopOpenID,这看起来很有趣,也许你可以和你的主机一起得到它?不是直截了当的,它们会被PHP解析器弄乱(如果里面有PHP,甚至会被执行)。对文件名应用一个过滤器,只对

include
PHP文件和
readfile
其他所有文件进行过滤?这似乎是一个大问题——因为Apache中没有内置处理自定义身份验证脚本的方法,唯一的选择是强制Apache通过自定义身份验证脚本或Apache模块传递每个请求。编写Apache模块或使用
mod_auth_openid
可能与
的要求冲突无论我做什么,它都应该在我的托管提供商中工作
,因此您唯一的选择就是通过自定义脚本传递所有内容。感谢您的努力。我已经浪费了大量的时间浏览Apache文档,似乎无法按照我的想法完成。遗憾的是,您无法将HTTP身份验证与自定义HTML表单(OpenID就是这样)结合起来因为浏览器需要发送带有用户名和密码的特定HTTP头。@ÁlvaroG.Vicario虽然我倾向于同意
您不能将HTTP身份验证与自定义HTML表单结合起来
对此有一些解决办法-尽管它依赖于Javascript,但不应该这样做。。。但是如果您真的想要,您可以创建一个AJAX请求来设置正确的httpauth细节,这些细节将被带入后续的请求中。我不是推荐它,我只是指出它是可以做到的。。。