這是我的情況。我有一個Web根目錄和幾個子目錄,讓我們說:Apache .htaccess重寫規則
/var/www
/var/www/site1
/var/www/site2
由於某些限制,我需要保持一個單獨的域,有這樣單獨的文件夾的能力。這將正常工作對我來說,但很多JS和CSS引用兩個站點指向的東西,如:
"/js/file.js"
"/css/file.css"
因爲這些文件是絕對引用,他們正在尋找在「JS」和「CSS」目錄/ var/www,這當然不存在。有沒有辦法使用RewriteRules來重定向絕對引用文件的請求,以指向正確的子目錄?我曾嘗試做這樣的事情:
RewriteEngine on
RewriteRule ^/$ /site1
或
RewriteEngine on
RewriteRule ^/js/(.*)$ /site1/js/$1
RewriteRule ^/css/(.*)$ /site1/css/$1
但這些都不能工作,甚至重定向到只有一個目錄,更別提同時處理1和Site2。我正在嘗試可能嗎?
編輯:解
我結束了適應Jon的建議,以適應我的情況。無論何時添加或刪除新的子目錄,我都可以通過編程方式對我的.htaccess文件進行更改。對於每一個「點」,我想,我有以下的部分在我的.htaccess:
RewriteCond %{REQUEST_URI} !^/$
RewriteCond %{REQUEST_URI} !^/index.php$
RewriteCond %{HTTP_COOKIE} sitename=site1
RewriteCond %{REQUEST_URI} !^/site1/
RewriteRule ^(.*)$ /site1/$1 [L]
的index.php是列出我所有的網站文件,刪除了「網站名稱」的cookie,並設定一個cookie 「sitename = site#」當選擇特定的一個時。我RewriteConds檢查,
- 如果請求不是用於/
- 如果請求不是的index.php
- 如果請求包含該cookie的「網站名稱= site1的」
- 如果請求不以「/ site1 /」開頭
如果滿足所有這些條件,那麼請求會被重寫以在請求前加上「/ site1 /」。我嘗試過在第三個條件中有一組符合(\ w +)而不是「site1」的cond/rules,然後在第四個條件和規則中引用%1,但這不起作用。我放棄了併爲此定下了決心。
是,該作品,但是當我做'重寫規則^ $/site1的/ $ 1',它導致Apache發佈內部服務器錯誤(*)。但對我來說,這似乎應該是個別規則的通用等價物! – denaje
看到我的編輯,它解決了循環。 –
啊,這很有道理。這將適用於一個網站,但我將如何支持多個網站?我嘗試添加'RewriteCond%{HTTP_REFERER}/site /'作爲附加條件,以便在重寫請求之前檢查REFERER。但是這不會超過第一頁,因爲點擊指向/page1.htm的鏈接仍然顯示/page1.htm作爲URI,即使它已被內部重寫到/site/page1.htm。然後,單擊第二個鏈接時,REFERER不正確,並且重寫規則不適用。有什麼建議麼? – denaje