我们在godaddy有两个主机套餐。我们的实时网站使用以下.htaccess文件正常工作。无需在url中使用index.php即可访问网站。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
我们在godaddy的其他主机上使用了相同的htaccess文件和相同的代码。我们只是想让生产和开发实例分开。但在其他托管相同的代码和htaccess文件,网站显示404页面找不到错误,但网站与url中的index.php工作正常。
我们在两台服务器上都有相同的php版本。只是想知道可能是什么问题?
答案 0 :(得分:10)
当我将100%工作代码移动到专用Debian服务器时,我也遇到了类似的问题。经过3个小时的研究,我发现了为什么htaccess文件不能正常工作。你需要在Apache配置中允许覆盖htaccess。
以下是步骤。
第1步:
在htaccess文件中添加
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
</IfModule>
第2步:
删除codeigniter config中的index.php
$config['index_page'] = '';
第3步:
允许覆盖Apache配置(命令)中的htaccess
sudo nano /etc/apache2/apache2.conf
并编辑文件&amp;改为
AllowOverride All
用于www文件夹
第4步:
重启Apache(命令)
sudo /etc/init.d/apache2 restart
在apache2.conf文件中进行任何更改之前,请确保制作该文件的备份副本。如果您使用的是Debian服务器,则可以避免使用sudo命令。我相信你知道如何使用像putty这样的ssh客户端软件连接到你的服务器。如果此方法不适合您,请在下面进行评论。
答案 1 :(得分:2)
你可以用它。这适用于godaddy托管。
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php?/$1
答案 2 :(得分:1)
当我在godaddy服务器上移动时,我遇到了类似的问题。这对我有用。
将此代码添加到.htaccess文件中。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/URL
RewriteRule ^(.*)$ index.php?url=$1 [PT,L]
</IfModule>
<IfModule !mod_rewrite.c>
ErrorDocument 404 index.php
</IfModule>
在配置文件中:
$config['base_url'] = 'domain.com';
$config['index.php'] = '';
httpd.conf中的Set AllowOverride to All
在/ cache文件夹上设置正确的权限,而不是仅仅使文件夹可写,您需要使其可以重复写入。
我希望它对你有用。
答案 3 :(得分:1)
你回声&#34;测试&#34;然后运行。然后你可以检查它是否被调用。
在配置文件中启用错误日志。
使您的/ application / logs文件夹可写。
在/application/config/config.php
集中。 $config['log_threshold'] = 4;
检查日志/application/logs
文件夹
答案 4 :(得分:1)
尝试小写所有控制器。这解决了我的问题。
答案 5 :(得分:1)
试试这个..这对我有用..
DirectoryIndex index.php
RewriteEngine on
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php?/$1 [L,QSA]
答案 6 :(得分:0)
我对服务器网络的了解有限,但这应该会给你一些想法。
首先,你必须知道什么是.htacess文件。你可以在这里查看link
.htaccess是一个配置文件,用于运行该服务的Web服务器 Apache Web Server软件。当.htaccess文件放在一个 然后,通过Apache Web Server加载的目录 Apache Web Server检测并执行.htaccess文件 软件。这些.htaccess文件可用于更改配置 Apache Web Server软件启用/禁用其他功能 Apache Web Server软件必须具备的功能和特性 提供。这些功能包括基本的重定向功能 实例,如果发现404文件未找到错误,或者更高级 内容密码保护或图像热链接等功能 预防。
基本上.htaccess授予您编辑 Apache Web服务器 配置的权限。如果在Apache中启用了 mod_rewrite ,您将获得使用.htacess的权限。我不会写.htaccess中的4个基本行可以在codeigniter中做什么,因为你可以在google中找到它。这个link可以给你一些很好的基本信息。
现在主要问题是.htaccess无法在您的其他主机中使用。这是可能的,因为有几个原因:
<?php phpinfo(); ?>
并检查“已加载的模块”是否存在mod_rewrite。此image。$config['base_url'] = "yourdomainname.com"; $config['index_page'] = '';
我希望这清楚地说明你为什么你的.htaccess无法工作。
答案 7 :(得分:0)
粘贴以下代码
RewriteEngine on
RewriteBase /
RewriteCond $1 !^(index\.php|resources|robots\.txt|static) [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/?$1 [L,QSA]
如果你可以在Linux终端或Putty的命令行上使用命令ssh username@ip_address
进入服务器
username
是GoDaddy给你的那个,或者你可以使用root
ip_address
是主机的公共IP,您可以在主机面板中找到它
运行命令sudo a2dissite 000-default
该命令禁用处理请求的默认apache配置
古德勒克!
答案 8 :(得分:0)
正如你在这里提到的,在localhost上你的代码工作正常但是当你将它移到实时服务器上时会导致404错误。您可能需要检查的情况很少:
第1步:检查在Apache配置中是否启用了mod_rewrite
第2步:删除codeigniter配置中的index.php为@geordy建议
您可以通过
进行检查<?php
echo 'Test'; die;
?>
在你的root index.php中。它确保您的所有请求都应该通过这些文件,否则Codeigniter框架将无法正常工作。