2013-08-29 72 views
1

或更好地說,重寫所有內容到app.php/public/路徑。我一直在環顧四周,但無法找到有效的解決方案。基本上我想要的是每個url都將被路由到app.php/route,即使文件夾存在 - 除非它已經被例外。目前我只是獲得403和foo,但是他們應該被路由到app.php/fooapp.php/bar。另一方面,/public/不應該被重寫。mod_rewrite即使現有的文件和文件夾

其他一些會很酷,但並不重要的是,url /app.php/將被重寫爲app.php/app.php

我需要做什麼在我的htaccess實現這種重寫方式?


目錄結構:

-| projects 
    -| SomeSite 
    -| foo 
     - .htaccess [deny from all] 
    -| bar 
     - .htaccess [deny from all] 
    -| public 
     -| css 
     -| js 
     -| img 
    - app.php 
    - .htaccess [mod_rewrite is here] 

我現在重寫htaccess的:

DirectoryIndex app.php 
RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !(/public|app\.php)$ 
RewriteRule ^(.*)$ app.php/$1 [QSA,L,NC] 
+0

是否還有其他2的任何重寫規則htaccess文件? (在foo和bar中) –

+0

引用REQUEST_FILENAME上的文檔:_「完整的本地文件系統路徑到文件或者匹配請求的腳本,如果這已經被服務器確定了」_--我認爲這可能是這裏的問題,服務器已經將foo目錄作爲已有的查找過,但是在那裏發現了你的「全部否認」htaccess - 因此用403來回答。你能否暫時從所有的拒絕服務中得到驗證? – CBroe

+0

@JonLin不,只是一個'拒絕所有'。 – RemiDG

回答

0

你的代碼改成這樣:

DirectoryIndex app.php 
Options +FollowSymLinks -MultiViews 
RewriteEngine On 

RewriteCond %{REQUEST_URI} !/(public|app\.php)(/.*|)$ [NC] 
RewriteRule ^(.*)$ app.php/$1 [L] 
+0

這給了我一個500錯誤。我想我應該注意到,WebRoot不是我的文檔根目錄,如果相關,該目錄實際上位於'htdocs/projects/WebRoot'中。 – RemiDG

+0

好吧,我做了一個編輯,請立即嘗試。 – anubhava

+0

似乎工作就像我的重寫規則(除了你的是不區分大小寫的)。當我去'/ foo'時,我仍然得到一個403,所以沒有什麼不同。然而,正如CBroe所建議的那樣,如果足夠安全,我可能會從foo和bar中刪除這些htaccesses。只需要有人來確認。順便說一句,app.php/app.php thingy呢?那可能嗎? – RemiDG

相關問題