2012-02-28 65 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

相關問題