0

我的网站在本地运行得很好,但是当我将它上传到我的主机 (GoDaddy) 时就坏了——当我点击我网站上的链接时,我得到一个“没有指定输入文件”。我偶然发现了这个 - https://github.com/EllisLab/CodeIgniter/wiki/Godaddy-Installation-Tips 并尝试了他们的第一个技巧

$config['index_page'] = "index.php?";

与通常的设置方式相反(没有问号)

这行得通,现在我的网站链接不再损坏。但是,现在我的LightOpenID 库中断(它无休止地重定向)。

如果有人清楚地解释了 URLS 发生了什么以及我可以做些什么来 A)从 index.php 中删除问号并仍然让我的网站正常工作或 B)保留?但弄清楚如何不破坏我的 LightOpenID 库。

4

3 回答 3

2

CodeIgniter 在 GoDaddy 共享主机上运行得非常成功

您可以使用 GitHub 上 CI wiki 上的 CodeIgniter Installation Tips 非常成功地设置它。

这些说明适用于 GoDaddy 共享主机。共享托管意味着该站点与多个其他 GoDaddy 客户共享单个 Web 服务器实例,并且由于服务器实例的 IP 地址不明确,因此 Web 服务器使用 URI 域名将人们路由到特定的。如果您有虚拟专用主机 (VPS) 和专用 IP 地址,则不需要这些说明。但是,由于大多数人在 GoDaddy 主机上使用 CodeIgniter 的问题与共享主机的工作方式有关,因此这应该很有用。

人们有时会遇到的另一个问题是,他们将 GoDaddy 共享主机帐户用作测试各种技术的“沙盒”。我这样做了,因此在将您的 CodeIgniter 实例放置在何处以及将您正在使用的与 CodeIgniter 相关的其他技术放置在何处时,还有其他考虑因素。我还有 WordPress、Drupal 和 Joomla 实例,用于在我的单一托管空间中测试它们的各个方面。它们与 CodeIgniter 一起工作得很好。

如果您的 CodeIgniter 实例位于服务器上共享主机帐户空间的子目录而不是根目录中,则可以使用,并且必须在设置中进行调整。

有两个设置需要调整 CodeIgniter 才能在 GoDaddy 上运行。第一个在 CodeIgniter 的 config.php 文件中,第二个在包含 CodeIgniter 实例的根文件夹中的 .htaccess 文件中。

CodeIgniter config.php 在 CodeIgniter application/config/config.php 中找到

$config['base_url'] = '';

$config['index_page'] = 'index.php?';

$config['uri_protocol'] = 'QUERY_STRING';

包含 CodeIgniter 的根文件夹中的 .htaccess 文件

首先,考虑 CodeIgniter 位于共享主机帐户的文档根目录中的简单情况。以下是与上述设置相匹配的基本 .htaccess 文件内容。

这些行必须有 UNIX 风格的行尾字符(即只有 lf 字符)。您不得使用将 cr/lf 置于行尾的编辑器(例如 Windows 记事本),或者您必须有一种仅在上传之前或上传期间将其更改为 lf 的方法。

当您将文件 FTP 到服务器时,FTP 客户端不得将行尾字符修改为 lf 以外的任何字符。如果您使用的 FTP 客户端可以在传输过程中将行尾字符从 Windows 样式(即 cr/lf)修改为 UNIX 样式(即 lf),您可以修复上传到服务器。

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

您的共享主机帐户的文件夹/文件现在应该类似于:

...
html/application
html/system
html/user_guide
...
html/.htaccess
...

其中 html 是您的共享主机帐户的文档根文件夹。

.htaccess 中的第一行确保 Rewrite 处于打开状态。

CodeIgniter 中的资源使用具有 URL/控制器/方法/参数类型结构的 URI 来引用。接下来的两行仅将重写规则应用于实际不存在的文件和目录。

如果你想引用不是 CodeIgniter 控制器的东西,而是 CodeIgniter 之外的东西的真实目录和/或文件名,你必须为它们关闭重写。一个示例是 CodeIgniter 随附的 CodeIgniter 用户指南,它位于 CodeIgniter 应用程序之外,通常与 CodeIgniter 实例位于同一根文件夹中,并且默认为名为 user_guide 的文件夹。如果您希望能够在 CodeIgniter 外部的真实文件夹中引用用户指南以工作,则必须为其禁用重写规则。这适用于 CodeIgniter 之外的任何其他“真实”文件夹。

出于安全原因,CodeIgniter 文件夹结构中的真实文件夹/文件包含它们自己的 .htaccess 文件,以防止使用 URI 直接访问它们。您必须确保以这种方式保护您创建并希望 CodeIgniter 使用的任何真实文件夹。查看 CodeIgniter 自己的文件夹中的任何 .htaccess 文件都会告诉你如何做到这一点。包含以下单个语句:

Deny from all

为了让 CodeIgniter 在 GoDaddy 共享主机上工作,我们并没有真正关闭使用 index.php?来自 CodeIgniter。相反,我们对 CodeIgniter 的控制器/方法/参数结构使用 HTML 查询字符串机制。最后一条规则确保 index.php?被插入到 URI 中,以便 URI 中的控制器/方法/参数结构成为 CodeIgniter 的 index.php 处理的查询字符串。

如果 CodeIgniter 实例位于共享主机帐户的根文档目录和指向它的域名中,那么所有这些都应该有效。

与其他技术共享文档根目录

如果您将 CodeIgniter 与其他技术(例如,Joomla、WordPress、Drupal 等)一起放入共享托管文档根目录,只要其他技术包含在不与之冲突的真实文件夹/文件中,上述设置应该可以工作CodeIgniter 文件夹和文件。

使用 CodeIgniter 实例的子目录

有时希望 CodeIgniter 不在共享主机帐户的根文档目录中,而是在子目录中。我这样做是为了防止 Drupal、WordPress 和 Joomla 实例也在它们自己的子目录中混合在 CodeIgniter 文件夹结构中。为此,.htaccess 文件需要额外的语句。例如,如果您希望 CodeIgniter 位于名为 code-igniter 的目录中,该目录从属于您的共享主机帐户的文档根目录,则以下 .htaccess 文件将适应使用 CodeIgniter 根目录的子文件夹。它不能放在共享主机帐户的文档根文件夹中,而是放在 CodeIgniter 的根目录中,在这种情况下,它是一个名为 code-igniter 的子文件夹:

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

此示例的目录结构类似于:

html/code-igniter/application
html/code-igniter/system
html/code-igniter/user_guide
...
html/code-igniter/.htaccess

其中 html 是共享主机帐户的文档根目录,code-igniter 是 CodeIgniter 实例的根文件夹。

附加的 RewriteBase 行确保重写始终从 CodeIgniter 实例的根目录的目录中进行。随后的几行仍然确保重写不适用于我的文档根目录中的其他技术的真实文件夹/文件。我希望这可以让 CodeIgniter 在两种不同的场景下在 GoDaddy 共享主机上工作不再神秘。

如果 CodeIgniter 实例位于多个子目录的下级,则相同的解决方案也可以不加更改地工作。例如,假设共享主机账户文档根目录为 html 目录,CodeIgniter 实例从属于 my-application 目录下的 code-igniter 目录:

html/my-application/code-igniter/application
html/my-application/code-igniter/system
html/my-application/code-igniter/user_guide

如果您想使用一个实例进行开发,IDE 会自动将更改推送到文件保存时的开发实例,并在不同的子目录中有另一个实例用于集成测试和生产的部署,这种安排很有用。.htaccess 和 config.php 文件无需修改即可工作。

于 2014-11-01T20:18:54.003 回答
0

你仍然可以跳过 index.php 吗?在 $config['index_page'] 上。

您需要将 $conifg['base_url'] 修改为您的 codeingniter 安装目录,例如 $conifg['base_url'] = ' http://www.randomsite.com/module/ ';

这对我很有用。现在该站点正在正确路由并且没有“index.php?”

另外,请按照上面 codeigniter 的 github 存储库上的链接进行操作

于 2014-04-29T12:19:52.463 回答
0

Dagon,如果您不了解有关服务和您正在使用的技术行为的正确详细信息,请不要谈论任何服务。

而不是遵循https://github.com/EllisLab/CodeIgniter/wiki/Godaddy-Installation-Tips上的步骤,请遵循以下步骤:

转到您的 godaddy 帐户文件管理器 --> WebRoot 目录 --> 如果它不存在则创建 php5.ini 并放置以下行:cgi.fix_pathinfo = 1

现在您需要重新启动您的 Web 进程:

登录您的客户经理。单击虚拟主机。在您要使用的主机帐户旁边,单击启动。在 Stats & Monitors 部分中,单击系统进程。在左侧列表中,单击您要查看的进程或单击所有进程以一次查看所有进程。要结束进程,请单击工具栏上相应的结束按钮。

现在您可以将 URI_PROTOCOL 用作 Auto。

于 2013-10-12T07:35:24.380 回答