2013-04-17 131 views
0

我正在與我的課程上的一個項目與htaccess文件似乎並不工作。我有這樣的:htaccess中的規則衝突

SetEnvIf Request_URI^root=/myroot/ 

RewriteRule ^(assets|inc) - [L] 
RewriteRule ^section[/]?$ %{ENV:root}section/index  
RewriteRule ^section/function/(.*)$ %{ENV:root}index.php?type=section&action=function [L] 
RewriteCond %{QUERY_STRING} ^(.*)?$ 
RewriteRule ^section/(.*)$      %{ENV:root}index.php?type=section&action=view [L] 
RewriteRule ^index\.php$ - [L] 

事實上,有三件事情我不明白:

如果我查詢的網址爲/section/function/,我應該得到/myroot/index.php?type=section &動作=功能,但我在我的瀏覽器中得到localhost/section/function,導致錯誤。是雙向翻譯的url:myroot/index.php?type = section & action = function在瀏覽器中出現/section/function/。如果我刪除最後一行,則會出現空白錯誤頁面,爲什麼是這樣?

編輯:

所以保形什麼奧拉夫Dietsche說,我改變了規則爲

SetEnvIf之後REQUEST_URI ^根=/myroot/

RewriteRule ^(assets|inc) - [L] 
RewriteRule ^section[/]?$ %{ENV:root}section/index  
RewriteRule ^section/function/(.*)$ %{ENV:root}?type=section&action=function [L] 
RewriteCond %{QUERY_STRING} ^(.*)?$ 
RewriteRule ^section/(.*)$      %{ENV:root}?type=section&action=view [L] 
RewriteRule ^index\.php$ - [L] 

但是,當我點擊<a href="section/somefunction"></a>,我我看到一個頁面localhost/section/some function。我真的不知道是怎麼回事錯....

回答

0

首先,你必須在.htaccess的規則,工作有

RewriteEngine on 

規則改寫的請求,但不重定向客戶端。兩者之間的區別是

  • 重寫發送另一個頁面的內容給客戶端,而不會告訴客戶端。客戶認爲它獲得了所請求頁面的內容。
  • 重定向向客戶端發送另一個URL,導致客戶端使用此URL發出新的請求。客戶端知道(並顯示在瀏覽器的欄中),它收到了另一個頁面的內容。

如果要重定向客戶端,你必須添加一個R標誌的RewriteRule

RewriteRule ^section/function/(.*)$ %{ENV:root}index.php?type=section&action=function [R,L] 

更新

必須在置換前刪除​​,因爲網址是例如/index.php而不是/myroot/index.php

RewriteRule ^section[/]?$ /section/index  
RewriteRule ^section/function/(.*)$ /index.php?type=section&action=function [L] 
RewriteCond %{QUERY_STRING} ^(.*)?$ 
RewriteRule ^section/(.*)$ /index.php?type=section&action=view [L] 
RewriteRule ^index\.php$ - [L] 
+0

謝謝你的解釋。當然,我的確已將RewriteEngine設置爲開啓,但它仍然無效,爲什麼呢? – user1611830

+0

@ user1611830我在我的測試環境中試過規則,並且它們工作,*將''/ section/function'重寫爲'/ myroot/index.php'。沒有error.log消息,很難說。例如,如果'/ myroot /'不是子目錄,而是*文檔根目錄*,則不能將其預先加入到'index.php'中。如果它是一個子目錄,那麼它可能沒有'index.php'。 PHP腳本本身可能存在一些錯誤,等等...... –

+0

對不起,我不想打擾你。但的確,/ myroot是根文件夾,所以我更新了我的規則(請參閱我的規則),但它沒有任何更改 – user1611830