dec*_*cay 11 php .htaccess mod-rewrite codeigniter
我在使用自定义(有点奇怪)的htaccess文件夹映射时遇到了codeignighter的问题.但是,它应该在技术上有效,但事实并非如此.有人能帮我吗?
场景1(工作正常):
文件夹结构和密钥文件
/ is the website root
/.htaccess
/api/ <this is the CodeIgniter Root, with index.php and default CI .htaccess>
Run Code Online (Sandbox Code Playgroud)
/.htaccess:
RewriteEngine On
RewriteRule ^api/(.*)$ /api/$1 [L]
Run Code Online (Sandbox Code Playgroud)
例如,访问mydomain.com/api/admin/会让我进入我的admin-controller/index操作并加载视图.
对于$ _REQUEST,index.php上的var_dump显示
array (size=1)
'admin/' => string '' (length=0)
Run Code Online (Sandbox Code Playgroud)
场景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>
Run Code Online (Sandbox Code Playgroud)
/.htaccess:
RewriteEngine On
RewriteRule ^(.*)$ /current/$1 [L]
Run Code Online (Sandbox Code Playgroud)
/current/.htaccess:
RewriteEngine On
RewriteRule ^api/(.*)$ /api/$1 [L]
Run Code Online (Sandbox Code Playgroud)
例如,访问mydomain.com/api/admin/可以访问Codeigniter 404页面/视图.
对于$ _REQUEST,index.php上的var_dump显示(与场景1相同)
array (size=1)
'admin/' => string '' (length=0)
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?我知道htaccess重写很奇怪,但就Codeigniter所见,路由是相同的(admin /).但他们的行为都不同.为什么?我尝试了所有我能想到的,据我所知,codeigniter看到了正确的路径,就像Request Object一样,但CI路由器不知何故没有正确使用它.
任何帮助表示感谢,如果您能想到任何我可以尝试帮助进一步调试的信息,请告诉我.
注意:我使用双htaccess的原因是我可以根据时间/场景安排不同的CI实例(您可以使用重写条件来提供不同的文件夹而不是"当前"文件夹).我目前没有使用它,因此在方案2中,根只有一个"当前"文件夹.
您将请求重定向到一个文件夹,而实际上您应该将这些请求重定向到 CodeIgniter 的 index.php 文件。
例如:
RewriteRule ^api/(.*)$ /api/index.php?/$1 [L]
Run Code Online (Sandbox Code Playgroud)
假设您在配置文件中将“index_page”设置为空字符串,如果它设置为index.php,那么在请求某些内容时,您应该在url中包含index.php。