我的网站在本地工作得很好,但当我把它上传到我的主机(GoDaddy)时就坏了-当点击我网站上的链接时,我得到了一个"没有输入文件指定"。我偶然发现了这个https://github.com/EllisLab/CodeIgniter/wiki/Godaddy-Installation-Tips并尝试了他们的第一个技巧
$config['index_page'] = "index.php?";
与通常的设置相反(没有问号)
这个工作,现在我的网站链接不再坏了。然而,现在我的LightOpenID库中断了(它不停地重定向)。
如果有人有一个清楚的解释是什么正在发生的url和我可以做什么A)从index.php中删除问号,仍然有我的网站工作或B)保留?但要弄清楚如何不破坏我的LightOpenID库。
CodeIgniter在GoDaddy共享主机上运行得非常成功
你可以使用GitHub上的CI wiki上的CodeIgniter安装提示成功地设置它。
这些说明是为GoDaddy共享主机。共享主机意味着站点与多个其他GoDaddy客户共享一个web服务器实例,并且由于服务器实例的IP地址是模糊的,因此web服务器使用URI域名将人们路由到特定的web服务器实例。如果您有虚拟专用主机(VPS)和专用IP地址,则不需要这些指示。但是,由于大多数人在GoDaddy托管上使用CodeIgniter的问题与共享托管工作方式引起的问题有关,因此这应该是有用的。
人们有时会遇到的另一个问题是,他们将GoDaddy共享主机帐户用作测试各种技术的"沙盒"。我这样做,所以在把CodeIgniter实例放在哪里以及把你正在使用的与CodeIgniter相关的其他技术放在哪里有额外的考虑。我还有WordPress、Drupal和Joomla实例,用于在我的单个托管空间中测试它们的各个方面。它们与CodeIgniter一起工作得很好。
如果您的CodeIgniter实例位于服务器上共享主机帐户空间的子目录而不是根目录中,则可以工作,并且必须在设置中容纳。
有两个设置需要调整CodeIgniter工作在GoDaddy。第一个在CodeIgniter的config.php文件中,第二个在包含CodeIgniter实例的根文件夹中的.htaccess文件中。
CodeIgniter config.php在CodeIgniter应用程序/config/config.php
$config['base_url'] = '';
$config['index_page'] = 'index.php?';
$config['uri_protocol'] = 'QUERY_STRING';
。包含CodeIgniter的根目录下的htaccess文件
首先,考虑一个简单的情况,CodeIgniter位于共享主机帐户的文档根目录中。下面是用于上述设置的基本.htaccess文件内容。
行必须有UNIX风格的行尾字符(即只有lf字符)。你不能使用编辑器(例如Windows记事本)将cr/lf放在行尾,或者你必须有一种方法将它们更改为lf,仅在上传之前或上传期间。
当您将文件FTP到服务器时,FTP客户端不能将行结束字符(s)更改为除lf以外的任何字符。如果您使用的FTP客户端可以将行尾字符从Windows样式(即cr/lf)修改为UNIX样式(即lf)作为传输的一部分,则可以在上载到服务器时修复cr/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中的第一行确保重写是打开的。
使用带有URL/控制器/方法/参数类型结构的URI引用CodeIgniter中的资源。接下来的两行只对实际上不存在的文件和目录应用重写规则。如果你想引用一些不是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实例隶属于code-igniter目录,隶属于my-application目录:
html/my-application/code-igniter/application
html/my-application/code-igniter/system
html/my-application/code-igniter/user_guide
如果您希望使用一个实例进行开发,IDE会自动将更改推送到文件保存中的开发实例,并在不同的子目录中有另一个实例用于集成测试和生产的部署,那么这种安排非常有用。.htaccess和config.php文件不需要修改就可以工作。
大衮,如果您不了解服务的细节和您正在使用的技术行为,请不要对任何服务发表任何评论。
与其遵循https://github.com/EllisLab/CodeIgniter/wiki/Godaddy-Installation-Tips上的步骤,不如遵循以下步骤:
转到您的godaddy帐户文件管理器-> WebRoot目录->创建php5.ini,如果它不存在,并放置以下行:cgi。Fix_pathinfo = 1
现在你需要重启你的Web进程:
登录您的Account Manager。单击Web Hosting。在要使用的托管帐户旁边,单击"启动"。在美国"监视器"部分,单击"系统进程"。在左侧列表中,单击需要查看的进程,或单击"所有进程",一次查看所有进程。要结束进程,请单击工具栏上相应的结束按钮。
现在你可以使用URI_PROTOCOL作为Auto.
你仍然可以跳过index.php?美元配置("index_page")。
你需要修改$conifg['base_url']到你的codeingniter安装目录如$conifg['base_url'] = 'http://www.randomsite.com/module/';
这对我来说很有效。现在网站路由正常,没有'index.php?'
另外,请点击codeigniter的github存储库上的链接