htaccess相当于PHP的$ _SERVER [' SERVER_NAME']?

时间:2012-02-28 04:38:35

标签: apache .htaccess

我需要动态输入当前域名到htaccess文件中。这在PHP中是微不足道的,但我无法弄清楚如何在“Apache Speak”中做到这一点而且我的Apache-fu很弱。

为了记录,我试过这个:

SetEnvIfNoCase Referer%{SERVER_NAME}内部

和此:

SetEnvIfNoCase Referer%{HTTP_HOST} internal

但坦率地说,我不确定我是否在正确的轨道上。我追求的最终结果看起来像是:

SetEnvIfNoCase Referer currentdomain.com internal

3 个答案:

答案 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