2012-02-28 44 views
0

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

为了记录在案,我已经试过这样:

SetEnvIfNoCase的Referer%{SERVER_NAME}内部

这:

SetEnvIfNoCase的Referer%{HTTP_HOST}内部

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

SetEnvIfNoCase Referer的currentdomain.com内部

回答

1

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

如果没有简单的答案,最有可能有不同的方式来处理这种情况。例如,如果您可以动态地插入一次并使用php编写.htaccess,则可以节省自己的麻烦,甚至可以节省代码的效率。

+0

OMG ......完全没有曙光对我做这个!精彩,简单。我将在第一次运行脚本时从头开始创建.htaccess文件,然后我可以使用PHP轻松生成域名。谢谢! – 2012-02-28 16:23:14

0

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

+0

这就是我所害怕的。我甚至不确定我正在运行什么版本,并且我有多个服务器。你能否提供一个使用SetEnvIfExpr来完成我想要做的事情的例子?与此同时,我正在自己研究它。 – 2012-02-28 05:00:15

+0

你可能没有运行2.4。无论如何,我会研究mod_rewrite,因为它会更便于携带。 – 2012-02-28 05:05:40

+0

是的,我不认为我正在运行2.4。 mod_rewrite如何帮助?我不想重写任何URL,我需要动态地插入任何当前域名,到我的htaccess文件。我误解了你的建议吗? – 2012-02-28 06:57:09

0

你可以这样做:

SetEnvIfNoCase Referer www\.whateveryourdomain\.com internal 

SetEnvIfNoCase的语法是这样的:

SetEnvIfNoCase attribute regex [!]env-variable[=value] [[!]env-variable[=value]] ... 

Apache Docs 属性可以有:

  • HTTP请求头字段(请参见RFC2616了解更多关于这些信息);例如:主机,用户代理,引用者和接受语言。正则表达式可用于指定一组请求标头。
  • 一方的请求以下几个方面:
    • REMOTE_HOST - 主机名(如果可用)与客户端的请求
    • REMOTE_ADDR的 - 客户端发出请求
    • SERVER_ADDR的IP地址 - 接收请求的服务器的IP地址(仅适用于版本低于2.0.43的版本)
    • Request_Method - 正在使用的方法的名称(GET,POST等)
    • Request_Protocol - 名称和版本与请求是ma协议(例如,“HTTP/0.9”,“HTTP/1.1”等)
    • Request_URI - 在HTTP请求行上请求的资源 - 通常是在没有查询字符串的方案和主机部分之后的URL部分。有关如何匹配查询字符串的额外信息,请参阅mod_rewrite的RewriteCond指令。
  • 与请求关联的列表中的环境变量的名称。这允许SetEnvIf指令对先前匹配的结果进行测试。只有那些由早期的SetEnvIf [NoCase]指令定义的环境变量才能以这种方式进行测试。 “早期”意味着它们在更广的范围(如服务器范围)或之前在当前指令的范围内定义。只有在请求特征不匹配且没有使用正则表达式的情况下才会考虑环境变量。

这同样适用于SetEnvIfNoCase

+0

问题是提交者不希望硬编码服务器名称。 – 2012-02-28 14:41:33

+0

是的,伊格纳西奥是完全正确的。我需要这是动态的,这样无论脚本在哪个域上运行,它都会自动将正确的信息提取到htaccess中。 – 2012-02-28 15:16:29

相关问题