2010-08-25 62 views
0

如果原始請求沒有以正斜槓(/)結尾,那麼我的重寫問題就暴露了GET變量。GET變量顯示在URL上.htaccess重寫URL不會終止/

這裏是我的規則:

# All requests are routed to PHP 
RewriteRule ^(.*)$ framework/index.php?framework=$1&%{QUERY_STRING} [L] 

如果我訪問:

http://www.domain.com/folder/

一切都很正常。如果我訪問:

http://www.domain.com/folder

我重定向到:

http://www.domain.com/folder/?framework=folder

是怎麼回事?

+0

你有沒有其他我們應該知道的RewriteRule? – Prix 2010-08-25 03:21:28

+0

這是蒂姆唯一的一個 – 2010-08-25 03:24:52

回答

2

聽起來像/folder存在於您的網站根目錄中。由於您尚未向Apache發送以斜槓終止的URL,並且所請求的資源是一個文件夾,因此DirectorySlash指令強制重定向到更正的URL。

不幸的是,mod_rewrite在重定向發生之前就已經發出請求了,雖然它沒有更改生成重定向時使用的URI,但它對查詢字符串的更改沒有以某種方式分離那mod_dir知道不包括他們。因此,當重定向發送回瀏覽器時,它會包含由您的RewriteRule生成的查詢字符串。

一個潛在的解決這個(比關機DirectorySlash,這是不建議在文檔中列出的原因除外)爲它進行mod_dir的工作作爲您的規則集的一部分:

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} -d 
RewriteCond %{HTTPS}s ^on(s)|off 
RewriteRule [^/]$ http%1://%{HTTP_HOST}%{REQUEST_URI}/ [R=301,L] 

RewriteRule ^(.*)$ framework/index.php?framework=$1 [QSA,L] 
+0

,你是合法的。感謝真棒的迴應和代碼。無論如何,使重定向動態的http://部分? (可能是https) – 2010-08-25 03:44:58

+1

@Kirk - 沒問題。我認爲我剛纔編輯的內容應該關注http/https問題,但是如果遇到問題,請告訴我。 – 2010-08-25 03:57:27

+0

希望我可以多次投票給你。謝謝! – 2010-08-25 04:24:58