【发布时间】:2015-11-03 03:58:31
【问题描述】:
我在使用自定义(有点奇怪)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 操作并正常加载视图。
index.php 上的 var_dump 显示 $_REQUEST
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 页面/视图。
index.php 上的 var_dump 用于 $_REQUEST 显示(与场景 1 相同)
array (size=1)
'admin/' => string '' (length=0)
这里发生了什么?我知道 htaccess 重写很奇怪,但就 Codeigniter 所见,路线是相同的 (admin/)。但他们俩的行为不同。为什么?我尝试了我能想到的一切,据我所知,codeigniter 看到了请求对象的正确路径,但 CI 路由器不知何故没有正确使用它。
感谢任何帮助,如果您能想到任何我可以尝试帮助进一步调试的方法,请告诉我。
注意:我使用双 htaccess 的原因是我可以根据时间/场景安排不同的 CI 实例(您可以使用重写条件来提供不同的文件夹而不是“当前”文件夹)。我目前没有使用这个,所以在场景 2 中,根目录只有一个“当前”文件夹。
【问题讨论】:
-
试试这个
RewriteRule ^api/(.*)$ /api/index.php/$1 [L] -
api文件夹中的资产文件呢?与 codeigniter 一样,api/assets/mylogo.jpg 呢?对此的任何请求都将进入 codeigniter php 文件并以 404 的形式出现。我错了吗?
-
澄清一下,api文件夹还包含一个htaccess文件,通常的CI htaccess文件:pastebin.com/aHM9cjtr问题中提到
-
当你在你的 php 文件中调用 mylogo.jpg 时它不会出错?但是如果你输入 url 那么它会出错。所以它起到防盗链的作用
-
我认为你不明白这一点。我需要 api 文件夹中的所有内容都能正常工作。链接到 CI 中的页面、链接到图像或任何其他存在的资产。我认为您完全忽略了问题的重点。附言。在您的解决方案的这种情况下,“热链接保护”是一个错误而不是一个功能。
标签: php .htaccess codeigniter mod-rewrite