Apache htaccess相当于PHP';s$服务器[';服务器名称';]?

Apache htaccess相当于PHP';s$服务器[';服务器名称';]?,apache,.htaccess,Apache,.htaccess,我需要动态地将当前域名输入到htaccess文件中。这在PHP中是微不足道的,但我不知道如何在“ApacheSpeak”中实现,而且我的ApacheFu很弱 为了记录在案,我尝试了以下方法: SetEnvIfNoCase Referer%{SERVER_NAME}内部 这是: SetEnvIfNoCase引用程序%{HTTP_HOST}内部 但坦率地说,我不确定自己是否走上了正确的道路。我追求的最终结果是: SetEnvifLocase Referer currentdomain.com int

我需要动态地将当前域名输入到htaccess文件中。这在PHP中是微不足道的,但我不知道如何在“ApacheSpeak”中实现,而且我的ApacheFu很弱

为了记录在案,我尝试了以下方法:

SetEnvIfNoCase Referer%{SERVER_NAME}内部

这是:

SetEnvIfNoCase引用程序%{HTTP_HOST}内部

但坦率地说,我不确定自己是否走上了正确的道路。我追求的最终结果是:


SetEnvifLocase Referer currentdomain.com internal

没有。如果您运行的是2.4,那么您可以使用
SetEnvIfExpr
,但是2.2或更早版本需要对mod_rewrite进行一些工作。

没有。如果您正在运行2.4,则可以使用
SetEnvIfExpr
,但2.2或更早版本需要对mod_rewrite进行一些工作。

您可以执行以下操作:

SetEnvIfNoCase Referer www\.whateveryourdomain\.com internal
SetEnvIfNoCase
的语法如下:

SetEnvIfNoCase attribute regex [!]env-variable[=value] [[!]env-variable[=value]] ...
从 属性可以有:

  • HTTP请求头字段(有关这些字段的更多信息,请参阅);例如:主机、用户代理、引用程序和接受语言。正则表达式可用于指定一组请求头
  • 请求的以下方面之一:
    • 远程主机-发出请求的客户端的主机名(如果可用)
    • Remote_Addr—发出请求的客户端的IP地址
    • Server_Addr—接收请求的服务器的IP地址(仅适用于2.0.43之后的版本)
    • 请求\方法-正在使用的方法的名称(GET、POST等)
    • Request_Protocol-发出请求的协议的名称和版本(例如,“HTTP/0.9”、“HTTP/1.1”等)
    • Request_URI—在HTTP请求行上请求的资源—通常是URL中方案后面的部分,主机部分没有查询字符串。有关如何匹配查询字符串的更多信息,请参阅mod_rewrite的RewriteCond指令
  • 与请求关联的环境变量列表中环境变量的名称。这允许setenif指令根据先前匹配的结果进行测试。只有那些由早期setenif[NoCase]指令定义的环境变量才能以这种方式进行测试。”“早期”表示它们是在更广泛的范围(如服务器范围)或之前在当前指令的范围内定义的。只有当请求特征之间不匹配且属性未使用正则表达式时,才会考虑环境变量
这同样适用于
SetEnvIfNoCase

您可以执行以下操作:

SetEnvIfNoCase Referer www\.whateveryourdomain\.com internal
SetEnvIfNoCase
的语法如下:

SetEnvIfNoCase attribute regex [!]env-variable[=value] [[!]env-variable[=value]] ...
从 属性可以有:

  • HTTP请求头字段(有关这些字段的更多信息,请参阅);例如:主机、用户代理、引用程序和接受语言。正则表达式可用于指定一组请求头
  • 请求的以下方面之一:
    • 远程主机-发出请求的客户端的主机名(如果可用)
    • Remote_Addr—发出请求的客户端的IP地址
    • Server_Addr—接收请求的服务器的IP地址(仅适用于2.0.43之后的版本)
    • 请求\方法-正在使用的方法的名称(GET、POST等)
    • Request_Protocol-发出请求的协议的名称和版本(例如,“HTTP/0.9”、“HTTP/1.1”等)
    • Request_URI—在HTTP请求行上请求的资源—通常是URL中方案后面的部分,主机部分没有查询字符串。有关如何匹配查询字符串的更多信息,请参阅mod_rewrite的RewriteCond指令
  • 与请求关联的环境变量列表中环境变量的名称。这允许setenif指令根据先前匹配的结果进行测试。只有那些由早期setenif[NoCase]指令定义的环境变量才能以这种方式进行测试。”“早期”表示它们是在更广泛的范围(如服务器范围)或之前在当前指令的范围内定义的。只有当请求特征之间不匹配且属性未使用正则表达式时,才会考虑环境变量

这同样适用于
SetEnvIfNoCase

试着问问自己,有没有不同的方法来解决您的问题

如果没有一个简单的答案,最有可能的是有一种不同的方式来处理这种情况


例如,如果您可以动态插入一次,然后用php编写.htaccess,您就可以省去代码中的麻烦,甚至可以提高代码的效率。

试着问问自己,有没有不同的方法来解决您的问题

如果没有一个简单的答案,最有可能的是有一种不同的方式来处理这种情况


例如,如果您可以动态插入它一次,然后用php编写.htaccess,那么您就可以避免麻烦,甚至可以提高代码的效率。

这正是我所担心的。我甚至不确定我运行的是什么版本,而且我有多台服务器。您是否可以提供一个使用SetEnvIfExpr来完成我试图做的事情的示例?同时我自己也在研究它。你可能没有运行2.4。不管怎样,我都会研究mod_重写,因为它更便于移植。是的,我不认为我在运行2.4。但是mod_重写会有什么帮助呢?我不想重写任何URL,我需要动态地将当前域插入到我的htaccess文件中。我误解了你的建议吗?使用
RewriteCond
检查推荐人,并使用空重写
RewriteRule