我需要动态输入当前域名到htaccess文件中。这在PHP中是微不足道的,但我无法弄清楚如何在“Apache Speak”中做到这一点而且我的Apache-fu很弱。
为了记录,我试过这个:
SetEnvIfNoCase Referer%{SERVER_NAME}内部
和此:
SetEnvIfNoCase Referer%{HTTP_HOST} internal
但坦率地说,我不确定我是否在正确的轨道上。我追求的最终结果看起来像是:
SetEnvIfNoCase Referer currentdomain.com internal
答案 0 :(得分:1)
试着问自己,你的问题有不同的方法吗?
如果没有一个简单的答案,那么最有可能采用不同的方法来处理这种情况。
例如,如果您可以动态插入一次并使用php编写.htaccess,您可以省去自己的麻烦,甚至可以节省代码的效率。
答案 1 :(得分:0)
没有一个。如果您运行的是2.4,则可以使用SetEnvIfExpr
,但2.2或更早版本需要使用mod_rewrite。
答案 2 :(得分:0)
你可以这样做:
SetEnvIfNoCase Referer www\.whateveryourdomain\.com internal
SetEnvIfNoCase
的语法是这样的:
SetEnvIfNoCase attribute regex [!]env-variable[=value] [[!]env-variable[=value]] ...
来自Apache Docs 属性可以有:
- HTTP请求标头字段(有关这些内容的详细信息,请参阅RFC2616);例如:Host,User-Agent,Referer和Accept-Language。正则表达式可用于指定一组请求标头。
- 请求的以下方面之一:
- Remote_Host - 发出请求的客户的主机名(如果有)
- Remote_Addr - 发出请求的客户的IP地址
- Server_Addr - 收到请求的服务器的IP地址(仅限版本高于2.0.43)
- Request_Method - 正在使用的方法的名称(GET,POST等)
- Request_Protocol - 发出请求的协议的名称和版本(例如,“HTTP / 0.9”,“HTTP / 1.1”等)
- Request_URI - HTTP请求行上请求的资源 - 通常是遵循方案的URL部分和没有查询字符串的主机部分。有关如何匹配查询字符串的更多信息,请参阅mod_rewrite的RewriteCond指令。
- 与请求关联的列表中的环境变量的名称。这允许SetEnvIf指令针对先前匹配的结果进行测试。只有早期SetEnvIf [NoCase]指令定义的环境变量才能以这种方式进行测试。 “早期”意味着它们在更广泛的范围(例如服务器范围)或之前的当前指令范围内定义。仅当请求特征之间没有匹配且未对该属性使用正则表达式时,才会考虑环境变量。
同样适用于SetEnvIfNoCase
。