2012-04-08 61 views
1
Options -Indexes 
RewriteEngine on 
Options +FollowSymLinks 

RewriteRule ^$ 2012/index.php [L] 
RewriteCond %{DOCUMENT_ROOT}/2012%{REQUEST_URI} -f 
RewriteRule .* 2012/$0 [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* 2012/index.php$0 [QSA] #<-- this is wrong here, and gives 500 error 

我試圖從2012子文件夾中服務所有我的網址。重寫從子域名服務的根訪問權限

我試過上面的腳本,它沒有像網址:

index.php/admin/controller/action?id=123

應該從子
2012/index.php/admin/controller/action?id=123

什麼是錯的解決?

+0

當你請求'index.php/admin/controller/action?id = 123'時,你期望得到什麼? – 2012-04-08 20:22:17

+0

我想從'2012/index.php/admin/controller/action?id = 123'服務。 – Pentium10 2012-04-08 20:42:42

回答

0

我要去猜測,URI /index.php/admin/controller/action?id=123失敗的-f測試%{DOCUMENT_ROOT}/2012%{REQUEST_URI},並而不致由最後一個規則圍捕:RewriteRule .* 2012/index.php?q=$0 [QSA],把URI爲/2012/index.php?q=index.php/admin/controller/action&id=123。您必須爲此添加一個特例,因爲第一個條件/規則允許現有文件按原樣重寫,而最後一個條件/規則充當「全部」(並且第一個規則是簡單的對於請求URI爲/的特殊情況)。嘗試是這樣的:

RewriteRule ^$ 2012/index.php [L] 
RewriteCond %{REQUEST_URI} ^/index\.php [OR] 
RewriteCond %{DOCUMENT_ROOT}/2012%{REQUEST_URI} -f 
RewriteRule .* 2012/$0 [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule .* 2012/index.php?q=$0 [QSA] 

新的條件RewriteCond %{REQUEST_URI} ^/index\.php [OR]將得到滿足,如果一個請求時開始/index.php和URI被改寫爲-是進入/ 2012 /目錄。 [OR]確保以前的直接訪問條件得到遵守。

+0

沒有轉向'index.php?= q',這只是一個糟糕的例子,因爲我沒有知道如何去做。我希望保持原樣,因此應該將其重定向到「2012/index.php/admin/controller/action?id = 123」,如我的評論。你的例子無法解析'index.php/admin' – Pentium10 2012-04-09 07:29:24