我之前从未使用过CodeIgniter,更不用说任何php框架了,我想我会尝试一下。一切都很顺利,除了我似乎无法从URL中删除index.php并仍然访问我的页面。
我从未使用过MVC结构,所以我正在学习,所以请原谅我,如果我做错了。
我正在尝试访问我创建的名为' about_page.php'只需输入 localhost / ci / about ,但目前我只能使用 localhost / ci / index.php / about
来访问它页面的控制器是: /application/controllers/about.php
该页面的模型是: /application/models/about_model.php
该页面的视图为: /application/views/about_page.php
我已经找到了解决这个问题的方法,但是还没找到。这是我已经搜索过的地方:
CodeIgniter - removing index.php
Codeigniter - how to remove the index.php from url?
http://www.farinspace.com/codeigniter-htaccess-file/
CodeIgniter在'应用程序'中附带.htaccess文件。仅包含Allow Deny From All
的文件夹。所以我在根目录http://localhost/ci/.htaccess
中创建了一个新的.htaccess文件,并将此代码添加到其中:
RewriteEngine On
RewriteBase /ci
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]
当.htaccess文件位于根目录中时,我收到500内部服务器错误。当我将完全相同的文件复制到应用程序文件夹时,500错误消失,但我仍然无法使用 localhost / ci / about
访问about页面我已将$config['index_page'] = 'index.php';
更改为$config['index_page'] = '';
我尝试将$config['uri_protocol'] = 'AUTO';
更改为$config['uri_protocol'] = 'REQUEST_URI';
,但我仍然收到内部服务器错误。
我进入了httpd.conf文件并取消注释了mod_rewrite.so模块,因此我知道mod_rewrite处于活动状态。
有没有人有任何想法为什么这不起作用或我如何能够完成这项工作?我知道StackOverflow上有很多关于这个问题的问题,但我找不到能回答我问题的问题。
我这样做了吗?我是否应该访问 localhost / ci / about 来访问about页面,或者我是否必须创建一个' about' '应用程序中的目录' ?目录
答案 0 :(得分:72)
要删除index.php
,需要执行3个步骤。
在application/config.php
文件
$config['base_url'] = 'http://'.$_SERVER['SERVER_NAME'].'/Your Ci folder_name';
$config['index_page'] = '';
$config['uri_protocol'] = 'AUTO';
使用以下代码
在根目录中创建.htaccess
文件
RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
启用重写引擎(如果尚未启用)
i。首先,使用以下命令启动它:
a2enmod rewrite
ii。编辑文件/etc/apache2/sites-enabled/000-default
将所有AllowOverride None
更改为AllowOverride All
。
注意:在最新版本中,您需要更改/etc/apache2/apache2.conf
文件
iii。使用以下命令重新启动服务器:
sudo /etc/init.d/apache2 restart
答案 1 :(得分:5)
您的.htaccess
略有偏离。看看我的:
RewriteEngine On
RewriteBase /codeigniter
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|images|robots\.txt|css|docs|js|system)
RewriteRule ^(.*)$ /codeigniter/index.php?/$1 [L]
在两个地方注意“codeigniter”。
之后,在你的配置中:
base_url = "http://localhost/codeigniter"
index = ""
在适当的时候将codeigniter更改为“ci”
答案 2 :(得分:4)
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /dmizone_bkp
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|images|robots\.txt|css|docs|js|system)
RewriteRule ^(.*)$ /dmizone_bkp/index.php?/$1 [L]
</IfModule>
答案 3 :(得分:3)
这对我有用
将您的 .htaccess 文件移至根文件夹(在我的案例中找到应用程序文件夹之前)
RewriteEngine on
RewriteBase /yourProjectFolder
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]
我的config.php看起来像这样(application / config / config.php )
$config['base_url'] = "";
$config['index_page'] = "index.php";
$config['uri_protocol'] = "AUTO";
让我知道它是否适合你们!干杯!
答案 4 :(得分:2)
我正在使用这样的东西 - codeigniter-htaccess-file,这是一篇很好的文章。
$config['index_page'] = "";
$route['default_controller']="home";
如果您正在运行CI(2.1.3)的干净安装,那么实际上并没有太多错误。
读
答案 5 :(得分:1)
如果不能正常工作
$config['uri_protocol'] = 'AUTO';
将其更改为
$config['uri_protocol'] = 'PATH_INFO';
如果不工作,请将其更改为
$config['uri_protocol'] = 'QUERY_STRING';
如果使用此
$config['uri_protocol'] = 'ORIG_PATH_INFO';
使用重定向或标题位置到url不在htaccess中将无法正常工作你必须在htaccess中添加url才能工作
答案 6 :(得分:1)
对于那些使用wamp服务器的用户,请按照@Raul Chipad解决方案的前两个步骤进行操作:
答案 7 :(得分:1)
我在Linux Ubuntu 14上有类似的问题。
在浏览器中不断出现403错误消息并在此处阅读所有答案后,我无法弄清楚出了什么问题。
然后,我到达了apache的错误日志,最后得到了一个提示,该提示有些出乎意料,但完全合乎逻辑。
codeIgniter主文件夹对文件夹没有X权限,导致Web服务器无法读取其他所有内容。
chmod ugo + x yourCodeIgniterFolder
解决了第一个问题。杀死了403个错误。
但是后来我开始出现错误500。
罪魁祸首是.htaccess中的设置行
然后我开始收到php错误。
对于与应用程序和系统文件夹中的内部文件夹具有“其他”权限的主文件夹没有X标志,罪魁祸首是同样的问题。
我为这个问题付出了两分钱:请阅读Apache Error.log。
但是,也要注意安全问题。 CodeIgniter建议将应用程序和系统文件夹移出Web空间,因此,如果这些文件夹保留在Web空间中,则应格外小心。
这里值得一提的另一件事是,我已将下载的CodeIgniter存档直接解压缩到Web空间。文件夹权限很可能直接从存档中创建。鉴于它们是安全的,但是CodeIgniter手册https://codeigniter.com/user_guide/installation/index.html中未提及文件夹访问问题(在类似Unix的系统上),并且可能会在其中提及有关如何放松CodeIgniter的安全性同时保持安全性的准则。生产系统(如前所述,手册中已经有一些安全提示)。
答案 8 :(得分:0)
只需在.htaccess文件中添加:
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]
答案 9 :(得分:0)
默认情况下,下面位于application
文件夹中,将其按建议移动到根目录中。
leave the .htaccess file in CI root dir
答案 10 :(得分:0)
打开 application / config / config.php 文件并进行以下更改,
通过替换$config['base_url']
的值来设置基本URL,如下
$config['base_url'] = 'http://localhost/YOUR_PROJECT_DIR_NAME';
使$config['index_page']
配置为$config['index_page'] = '';
在项目根文件夹中创建新的 .htaccess 文件,并使用给定的设置,
RewriteEngine on
RewriteCond $1 !^(index\.php|resources|assets|images|js|css|uploads|favicon.png|favicon.ico|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]
重新启动服务器,打开项目,一切都会顺利进行。