在使用自定义(有点奇怪)的htaccess文件夹映射时,我遇到了codeignighter的问题。但是,它应该在技术上有效,但事实并非如此。有人能帮助我吗?
场景1(正常工作):
文件夹结构和密钥文件
/ is the website root
/.htaccess
/api/ <this is the CodeIgniter Root, with index.php and default CI .htaccess>
/ htaccess的:
RewriteEngine On
RewriteRule ^api/(.*)$ /api/$1 [L]
访问mydomain.com/api/admin/例如让我进入我的admin-controller / index操作并加载视图。
对于$ _REQUEST,index.php上的var_dump显示
array (size=1)
'admin/' => string '' (length=0)
场景2(不起作用):
文件夹结构和密钥文件
/.htaccess
/current/.htaccess
/current/api/ <this is the CodeIgniter Root, with index.php and default CI .htaccess, this is the same folder/files/htaccess as above scenario>
/ htaccess的:
RewriteEngine On
RewriteRule ^(.*)$ /current/$1 [L]
/current/.htaccess:
RewriteEngine On
RewriteRule ^api/(.*)$ /api/$1 [L]
访问mydomain.com/api/admin/例如,让我进入Codeigniter 404页面/视图。
对于$ _REQUEST,index.php上的var_dump显示(与场景1相同)
array (size=1)
'admin/' => string '' (length=0)
这里发生了什么?我知道htaccess重写很奇怪,但就Codeigniter所见,路由是相同的(admin /)。但他们的行为都不同。为什么?我尝试了所有我能想到的,就我所知,codeigniter看到了正确的路径,就像请求对象一样,但CI路由器不知何故没有正确使用它。
任何帮助表示感谢,如果您能想到任何我可以尝试帮助进一步调试的信息,请告诉我。
注意:我使用双htaccess的原因是我可以根据时间/场景安排不同的CI实例(您可以使用重写条件来提供不同的文件夹而不是“当前”文件夹)。我目前没有使用它,因此在方案2中,根只有一个“当前”文件夹。
答案 0 :(得分:2)
从CodeIgniter的URI中删除index.php可能会很痛苦。上周我遇到了类似的情况:我在/var/www/html
和/ci
我的项目中有我的根目录...所以在/ci
内我有以下内容.htaccess:
RewriteEngine on
RewriteCond $1 !^(index\.php)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
并在apache2配置文件中添加了以下内容:
<Directory /var/www/html/ci/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
同时检查application/config/config.php
中是否有:
$config['uri_protocol'] = 'REQUEST_URI';
希望有帮助...
答案 1 :(得分:0)
您正在将请求重定向到文件夹,而实际上您应该将这些请求重定向到CodeIgniter的index.php文件。
e.g:
RewriteRule ^api/(.*)$ /api/index.php?/$1 [L]
假设您在配置文件中将'index_page'设置为空字符串,如果它设置为index.php,那么在请求某些内容时,您应该在url中包含index.php。