2017-06-04 102 views
0

我在web根目錄的project文件夾中有一個Codeigniter項目。爲什麼RewriteRule不能在沒有R標誌的情況下工作.htaccess

www 
www/.htaccess 
www/project/.htaccess (here are its contents https://pastebin.com/qBbZ0REj) 

WWW /的.htaccess

RewriteEngine On 
RewriteRule ^pg/fetchPG/(.*)$ /project/product_groups/fetchPG/$1 [L] 

www/project/.htaccess

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?/$1 [L] 

有關部分如果我做

http://localhost/pg/fetchPG/?groupid=26&response=html&mode=graph&response=html 

它應該顯示的內容

http://localhost/project/product_groups/fetchPG/?groupid=26&response=html&mode=graph&response=html 

但它只是給我看Codeigniter的404頁面。

我認爲Querystring丟失了,但我試圖在該頁面中打印$ _GET,這很好,它一直在。

我將[L]替換爲[L, R],它起作用,它重定向到該URL,但我不希望用戶看到最終的URL。

PS:我有專門的服務器,我有一切控制權,請建議是否有其他方法來幫助我實現目標?

+0

在你的文件系統的根目錄下是否有'/ project'文件夾? –

+0

@DusanBajic文件系統的根?不,'project'文件夾在'www'中,意思是它在'www/project'中的位置..請參閱問題,我試圖解釋我有的目錄結構 – Umair

+0

文檔是否位於'www'或'www/project '? –

回答

1

它與R|redirect標誌一起使用的原因是,用重定向客戶端發送一個新請求,結果REQUEST_URI更改。

我假定,笨被配置爲查看REQUEST_URI而不是在QUERY_STRING,其對應於該規則在www/project/.htaccess

RewriteRule ^(.*)$ index.php?/$1 [L] 

爲了修正它,作爲user guide

描述改變 uri_protocolquery_string

最後,將以下新項目添加到配置文件(並根據需要編輯選項):

/* 
|------------------------------------------------ 
| URI PROTOCOL 
|------------------------------------------------ 
| 
| This item determines which server global 
| should be used to retrieve the URI string. The 
| default setting of "auto" works for most servers. 
| If your links do not seem to work, try one of 
| the other delicious flavors: 
| 
| 'auto'   Default - auto detects 
| 'path_info' Uses the PATH_INFO 
| 'query_string'  Uses the QUERY_STRING 
*/ 

$config['uri_protocol'] = "auto"; 

你的情況,這應該看起來像

$config['uri_protocol'] = "query_string"; 

爲了保存查詢字符串,你可以嘗試path_info代替,例如

$config['uri_protocol'] = "path_info"; 

但你也必須更改www/project/.htaccess重寫規則

RewriteRule ^(.*)$ index.php/$1 [L] 

注意,有沒有問號(?)了。

+0

你的建議'$ config ['uri_protocol'] =「query_string」;'帶我的代碼來糾正控制器,但是在這個過程中,所有查詢字符串都會丟失,它是空的。 '$ _GET'只有'/ product_groups/fetchPG /'在裏面... – Umair

+0

我甚至試過'[L,QSA]'但沒有查詢字符串參數,全部丟失。 – Umair

+0

它應該保留查詢字符串,儘管您可能會嘗試'uri_protocol = path_info'。 –

相關問題