我试图实现的是使用htaccess来仅允许来自同一服务器的请求,但通过使用可用变量并且不指定IP。 目标是能够对相应文件夹中的文件运行cron作业和ajax请求,但如果尝试直接访问,则返回404页面。htaccess命令只允许来自同一服务器的请求(不指定IP)
这是我到目前为止有:
Options -MultiViews +FollowSymLinks
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !%{SERVER_ADDR}[NC]
RewriteRule ^(.*)$ /error404.html [L,R=404]
这工作得很好了阿贾克斯。它也适用于cronjobs,如果服务器碰巧使用相同的外出IP,但是如果服务器的外出IP与站点的IP不同,显然它将失败并返回404,因为%{REMOTE_ADDR}
与%{SERVER_ADDR}
不同。 一个解决方案是查看该服务器的传出IP,并将其添加为另一个异常。不过,我正在寻找更可重用的解决方案。我试图使用正则表达式来匹配IP的第一部分,但我没有这样的运气。真的不知道如何去做这件事。基本上与正则表达式我想要实现的是: 假设:
%{REMOTE_ADDR} = 192.322.122.50
%{SERVER_ADDR} = 192.322.122.1
这些是2个变量,我需要找到一个有效的比较表达式。如果IP的第一部分相同,则此表达式将返回true。
另一种方法是指定允许的范围,但我不知道想要的范围是什么。我知道这是第一部分,如果SERVER_ADDR
变量,但我不知道如何告诉服务器我的意思:D
希望我不是太混乱。最终,我正在寻找的是一种确定请求是否来自同一台服务器的方法。它必须通过.htaccess文件来实现。为什么?由于受保护的文件夹还包含非PHP脚本的文件,所以替代方法是动态地为所有这些文件提供服务,并在所有条件下使用PHP。使用普通的htaccess命令会更加优雅。我只是希望有一种方法可以做到这一点。
你可能做的最好的事情是匹配子网(像前3个字节),但不是像1-50这样的任意范围。 –
是匹配子网是我想要做的。我想另一种方式来说这是..你如何写条件,所以它只允许来自同一子网的请求? 而1-50只是一个例子。以及知识产权。我试图使代码完全动态,所以换句话说,子网不能从字面上指定,但它必须以某种方式从SERVER_ADDR变量中提取。这是我的困境。 – Owbey