我在Web根目录的project
文件夹中有一个Codeigniter项目。
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丢失了,但是我尝试在那个404页面打印$ _GET,它很好,它就要出现了。
我将[L]
替换为[L, R]
并且有效,它会重定向到该网址,但我不希望用户看到最终的网址。
PS:我有专门的服务器,我控制了一切,请建议是否还有其他办法来实现我的目标?
答案 0 :(得分:1)
它与R|redirect
标志一起使用的原因是,通过重定向,客户端会发送新请求,因此REQUEST_URI
会发生变化。
我假设,CodeIgniter配置为REQUEST_URI
而不是QUERY_STRING
,这与www/project/.htaccess
RewriteRule ^(.*)$ index.php?/$1 [L]
要解决此问题,请按照user guide
中的说明将uri_protocol
更改为query_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]
请注意,不再有问号(?
)。