2012-11-01 77 views
0

我有兩個目錄我的應用程序目錄下URL通過entry.php改寫

my_app: 
    .htaccess 
    lib: 
    entry.php 
    web: 
    css: 
     css_file1 
     css_file2 
    js: 
     js_file1 
     js_file2 

我的網址會是這樣http://example.com/my_app/my_path

根據目錄程序my_app,有兩個目錄網絡lib

如果my_path的可以映射到網絡目錄下的任何文件,使用它。例如,http://example.com/my_app/css/css_file1應映射到my_app/web/css/css_file1

否則其重定向到LIB/entry.php/my_path的使得所述my_path的可以通過$ _SERVER訪問[ 'PATH_INFO']重定向應該是內部的。用戶不應該看到重定向。

我想在.htaccess中寫配置來完成它。 我寫了下面給出的代碼。

<IfModule mod_rewrite.c> 
    RewriteEngine on 
    RewriteRule (.*) ../web/$1 
    RewriteCond web/%{REQUEST_FILENAME} !-f 
    RewriteCond web/%{REQUEST_FILENAME} !-d 
    RewriteRule (.*) lib/entry.php/$1 
</IfModule> 

但是我得到了403錯誤。

+0

你是什麼DOCUMENT_ROOT? – anubhava

+0

DOCUMENT_ROOT是/ var/www。但my_app位於/ var/www/my_app。 –

+0

添加一個重寫規則,將每個頁面匹配(如果文件不存在)重寫爲一個URL參數。因此,在root htaccess中,將/ my_app/foo/bar重寫爲/?q = my_app/foo/bar。現在在根目錄的索引文件中執行正確的調用。 –

回答

1

我相信下面的應該/var/www/.htaccess即適合您直屬$DOCUMENT_ROOT

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

RewriteCond %{DOCUMENT_ROOT}/$1/web/$2 -f [OR] 
RewriteCond %{DOCUMENT_ROOT}/$1/web/$2 -d 
RewriteRule ^([^/]+)/(.*)$ $1/web/$1 [L] 

RewriteCond %{ENV:REDIRECT_STATUS} !200 
RewriteRule ^([^/]+)/(.*)$ $1/lib/entry.php/$2 [L] 
+0

配置取決於目錄my_app。如果我將my_app目錄更改爲另一個目錄your_app。我必須改變配置。我不認爲依賴是好的。 –

+0

我沒有得到您的評論。根據你的問題,你有.htaccess權限在my_app下,這就是我的代碼應該進入的地方。 – anubhava

+0

我想創建一個簡單的php框架工作來處理clean-url。 .haccess是一個核心文件。最終用戶不會爲他的應用程序目錄更改它。 –