2013-05-16 80 views
0

我有以下文件夾結構:htaccess的多個子目錄中重寫到www-根

  • WWW的根
    • 後端
      • 配置
    • 前端
      • 管理
      • 店面

我希望能夠從主URL和隱藏子目錄之間訪問的目錄。

所以行政部分,我應該能夠訪問這樣的:

http://localhost/Administration/ 

存儲在子目錄「門面」的主頁,我希望能夠從根訪問:

http://localhost 

這是我的.htaccess文件中的代碼至今:

# Store Redirect 
RewriteEngine on 
RewriteCond %{HTTP_HOST} ^localhost [NC] 
RewriteCond %{REQUEST_URI} !^/Frontend/StoreFront 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /Frontend/StoreFront/$1 
RewriteCond %{HTTP_HOST} ^localhost [NC] 
RewriteRule ^(/)?$ /Frontend/StoreFront/index.php [L] 
RewriteCond %{REQUEST_URI} !^/Administration 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /Frontend/Administration/$2 

此代碼如何永遠不能正常工作。它將除index.php文件之外的每個文件重寫到管理子目錄。一方面說明:位於後端目錄中的php文件應該保持前端的「可包含」。

回答

1

讓我先告訴你,你試圖達到的是不可能的任務,現在讓我告訴你爲什麼。你有這樣的規則:

RewriteRule ^(.*)$ /Frontend/StoreFront/$1 

上下進一步您有:

RewriteRule ^(.*)$ /Frontend/Administration/$2 

你不能有.*來到這兩個地方。你需要以某種方式區分這兩條路徑。

這是除了你還有其他的問題點也如:

  1. 不使用L(LAST)標誌需要
  2. 在第二個規則中使用$2代替$1無論

編輯:根據您的意見:

Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteRule ^(Administration(?:/.*|))$ /Frontend/$1 [L,NC] 

RewriteCond %{HTTP_HOST} ^localhost [NC] 
RewriteRule ^$ /Frontend/StoreFront/index.php [L] 

RewriteCond %{HTTP_HOST} ^localhost [NC] 
RewriteCond %{REQUEST_URI} !^/Frontend/StoreFront 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /Frontend/StoreFront/$1 [L] 
+0

對於第二個我只想重寫管理目錄到'/ Frontend/Administration /'。我不想將管理目錄中的每個文件都重寫到根目錄。只是目錄本身。 所以'http:// localhost/Administration'實際上是:'http:// localhost/Frontend/Administration /',因此在瀏覽器中顯示爲'http:// localhost/Administration'。 – Martin

+1

好的,我會基於此提供我的答案。 – anubhava

+0

謝謝!我非常感謝。我仍然有一個小問題。如果我在管理後不放置斜線,我會得到一個404.所以'http:// localhost/Administration'會產生一個404,但是'http:// localhost/Administration /'不會。 – Martin