2014-08-28 51 views
2

我試圖將所有請求路由到/web/index.php(前端控制器),同時直接提供靜態文件(如果存在)。使.htaccess使用前端控制器將所有請求重寫爲/ web?

以下.htaccess file是從Symfony 2應用程序中提取的,並且看起來可以正常工作。請求發送到./index.php,我可以訪問靜態文件,如./web/css/style.css。我正在共享主機(不是一個好的),而且這個.htaccess似乎是唯一的一個工作(this將導致500錯誤)。

如何將所有請求路由到/web文件夾?似乎我需要改變E=BASE變量中的某些內容,我試過[E=BASE:%1/web],但它不起作用。

我對重寫規則有一點了解,你能指點我到正確的方向嗎?

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$ 
    RewriteRule ^(.*) - [E=BASE:%1] 

    RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
    RewriteRule ^index\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L] 

    RewriteCond %{REQUEST_FILENAME} -f 
    RewriteRule .? - [L] 

    # Rewrite all other queries to the front controller. 
    RewriteRule .? %{ENV:BASE}/index.php [L] 
</IfModule> 

回答

0

我可能是遙遠......在這裏,但不是它只是:改變最後一行:

RewriteRule .? %{ENV:BASE}/web/index.php [L] 

對於它需要看着你的/ Web文件夾的靜態文件檢查文件是否存在。目前RewriteCond %{REQUEST_FILENAME} -f只是檢查請求的文件路徑是否存在。

嘗試的RewriteCond%前投擲RewriteBase指令{} REQUEST_FILENAME -f:

RewriteBase /web/ 
RewriteCond %{REQUEST_FILENAME} -f 
+0

是的前控制器工作,但不適用於靜態文件;即/ /ss/style.css在/web/css/style.css中不起作用。 – gremo 2014-08-28 19:28:33

+0

啊我明白了。然後,我會用另一個「嘗試」更新我的答案。 – 2014-08-28 19:30:25

0

您可以使用此代碼替換你的.htaccess:

RewriteEngine On 

RewriteCond %{THE_REQUEST} /index\.php [NC] 
RewriteRule ^(.*?)index\.php$ /$1 [L,R=302,NC,NE] 

RewriteCond %{REQUEST_FILENAME} -f 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^((?!web/).*)$ web/$1 [L,NC] 
0

讓我們假設你的域名gremo_silex.com,你的主機有它的目錄像

~/domains/gremo_silex.com/public_html 

(我過去幾年使用的所有託管服務的目錄結構與此類似)。 然後,您可以將Silex項目放在一個目錄中(位於~/domains/gremo_silex.com),並將您的web目錄重命名爲public_html,這樣您的網址中就沒有web了。

0

今天我遇到了同樣的問題。通常情況下,Web主機將允許您更改Apache的文檔根目錄(我的首選方法),但在這種情況下,這是不可能的。因此,與一些兩輪牛車我編這個:

<IfModule mod_rewrite.c> 
    RewriteEngine on 

    # Serve all public files from /web/ 
    RewriteCond %{REQUEST_URI} !web/ 
    RewriteRule (.*) /web/$1 [L] 

    # If file doesn't exist send to front controller 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule ^(.*)$ /index.php [QSA,L] 
</IfModule> 

REQUEST_URI頭進來,而不/web前綴PHP太多,所以路由應該工作開箱。

相關問題