2013-03-02 155 views
1

我的網絡路徑是: http://git.example.com/(例如)的.htaccess重寫子目錄不工作

我的文檔根目錄是:

/home/user/git/ 

裏面的文檔根我有兩個文件夾:

/home/user/git/john 
/home/user/git/doe 

這些文件夾分別代表john和doe的git倉庫。它們託管在Web服務器上,以便代碼可以在創建之前進行測試,然後再提交給主服務器。

我遇到的問題是,回購站點中的站點代碼具有wordpress風格的.htaccess文件,以便腳本可以處理每個產品的數據庫中指定的所有頁面段落等。我有以下代碼在我的/home/user/git/john目錄內的.htaccess文件:

RewriteEngine On 
RewriteBase /john/ 

# FORCE BROWSER TO URL AND DO NOT ATTEMPT TO SLUG MATCH THESE 
RewriteCond %{REQUEST_URI} ^/john/checkout/(.*)$ [OR] 
RewriteCond %{REQUEST_URI} ^/john/admin/(.*)$ [OR] 
RewriteRule ^.*$ - [L] 

# ROUTE THROUGH CMS 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . index.php 

我也試圖改變rewritebase只是/,我試圖改變最後一行RewriteRule . /john/index.php和其中的所有變化。沒有我做的工作。

我的意思是不工作?那麼說,我有網址http://git.example.com/john/some_product_name.html - 我得到一個404未找到錯誤,並且Apache錯誤日誌只有一個標準的404沒有這樣的文件的請求。而已。它就像「沒有屎這個文件不存在......當它找不到時,你應該重寫這個文件!」

無論如何,當所有操作都在根目錄之外時,這個確切的腳本完美地工作,因爲它在活動站點上,但是將副本移動到子目錄一直是個問題。我可以爲項目中的每個開發人員創建一個新的子域,然後從他們的doc_root中運行git,但真的......應該有一種方法可以使這項工作成爲可能。我錯過了什麼?

另外 - 我可以確認重寫沒有發生,因爲在我的index.php文件的頂部,我有:echo "I'm here"; exit;因此,而不是404未找到,我應該看到一個空白的白頁,並顯示消息「I在這裏「。我不。

**更新**

我註釋掉力通過線頂部這樣,它現在的工作:

RewriteEngine On 
RewriteBase /john/ 

# FORCE BROWSER TO URL AND DO NOT ATTEMPT TO SLUG MATCH THESE 
#RewriteCond %{REQUEST_URI} ^/john/checkout/(.*)$ [OR] 
#RewriteCond %{REQUEST_URI} ^/john/admin/(.*)$ [OR] 
#RewriteRule ^.*$ - [L] 

# ROUTE THROUGH CMS 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . index.php 

世界爲什麼這些線路是造成這個問題?我訪問的網址絕對不符合這兩種模式!

+0

爲第1規則按預期運行刪除最後一個[OR]。 – 2013-03-02 05:38:28

+0

* facepalm *你可以回答這個問題,我可以接受嗎? – SublymeRick 2013-03-03 05:19:22

回答

2

在第1章刪除最後一個[OR],如:

# FORCE BROWSER TO URL AND DO NOT ATTEMPT TO SLUG MATCH THESE 
RewriteCond %{REQUEST_URI} ^/john/checkout/(.*)$ [OR] 
# Don't use OR in next line. 
RewriteCond %{REQUEST_URI} ^/john/admin/(.*)$ 
RewriteRule ^.*$ - [L]