2016-08-20 70 views
0

考慮一個目錄,該目錄是由Apache網絡服務器的URL sample.com下服務的結構如下:阿帕奇重寫規則指向密碼保護的目錄

/local/path/index.html 
/local/path/.htaccess 
/local/path/admin 
/local/path/admin/.htaccess 
/local/path/admin/projects/project1/index.html 
/local/path/admin/projects/project2/index.html 
/local/path/admin/projects/project3/index.html 

/local/path/projects是指向其他目錄符號鏈接。 這樣的/local/path/.htaccess內容基本上是這樣的規則:

Options SymLinksIfOwnerMatch 

其他的.htaccess確保admin目錄受密碼保護。

當要求http://sample.comindex.html送達。 當例如請求http://sample.com/admin/projects/project1,在用戶輸入正確的密碼後提供/local/path/admin/projects/project1/index.html的內容。 請求http://sample.com/admin當然會導致404錯誤。

我的意圖是讓地址http://sample.com/admin服務/local/path/admin/projects/project1/index.html。但是這不應該是重定向,也就是說,例如在瀏覽器的url-bar中,url仍然是選擇的。但如果有必要,重定向到http://sample.com/admin/就沒關係。


我試圖提升/local/path/admin/.htaccess文件有以下:

RewriteEngine On 
RewriteRule ^admin admin/projects/project1 
RewriteRule ^admin/(.*) admin/projects/project1/$1 

但規則似乎沒有任何效果。這可能是因爲它指向了密碼保護區域嗎?

在另一方面,這是不可能創造admin/.htaccess像這裏面的規則:

RewriteRule ^(.*)$ projects/project1/$1 

什麼我做錯了嗎?

回答

0

嘗試內/local/path/admin/.htaccess這條規則:

RewriteEngine On 

RewriteRule ^/?$ /admin/projects/project1/index.html [L] 

RewriteRule ^(?!projects/project1/).+$ /admin/projects/project1/$0 [L,NC] 
+0

這工作得很好。但是,如果project1包含一些html所需的文件,該怎麼辦?我嘗試過:'RewriteRule^/(。*)$/admin/projects/project1/$ 1 [L]'但這不行。 –

+0

我完全不理解您的評論,但您可以在'admin/.htaccess'中嘗試更新的規則: – anubhava

0

我會建議給在文檔here更好看:

.htaccess使用重寫引擎文件的每個目錄 前綴(即,通向包含 此.htaccess文件的目錄的URI路徑)會自動刪除以用於RewriteRule 模式匹配並在任何相對(不是 以斜槓或協議名稱開頭)之後自動添加替換遇到規則集的 末尾。有關更多信息,請參閱RewriteBase指令 有關將添加回相對替換的前綴。

並再次:

移除的前綴始終以斜線結束,這意味着匹配 發生針對其從未有斜線的字符串。因此,一個 模式^/從不匹配在每個目錄上下文中。因此,考慮

的每個目錄的前綴將自動刪除,你應該試試你的重寫規則,而不當你寫/local/path/admin/.htaccessadmin前綴。