PHP - 没有 index.php,codeigniter URL 不起作用 - 找不到对象

Posted

技术标签:

【中文标题】PHP - 没有 index.php,codeigniter URL 不起作用 - 找不到对象【英文标题】:PHP - codeigniter URL not working without index.php - object not found 【发布时间】:2016-06-19 22:16:56 【问题描述】:

我正在为我的网站使用 codeigniter v3,但在从一个页面重定向到另一个页面时遇到问题。

如果我点击选项卡,链接会显示localhost:8080/IDS/view/decisiontree 并显示Object not found! The requested URL was not found on this server...

如果我编辑 URL 并将其设为 localhost:8080/IDS/index.php/view/decisiontree,则该站点将完美加载。

这是我的路线:

$route['view/decisiontree'] = 'data_controller/goto_decisiontree';

以下是相关标签的代码:

<li><a href="<?php echo base_url();?>view/decisiontree">Decision Tree</a></li>

这是我的数据控制器:

public function goto_decisiontree()
    $data['page'] = "2";

    $this->load->view('decisiontree_page', $data);

这是我的config.php

$config['base_url'] = 'http://localhost:8080/IDS';
$config['index_page'] = '';
$config['uri_protocol'] = 'REQUEST_URI';

这是我的 .htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

请注意,我使用的是 Codeigniter V3。

非常感谢您的帮助!

【问题讨论】:

只是在base url末尾的注释提出斜杠/$config['base_url'] = 'http://localhost:8080/IDS/'; 你使用的是 wamp 还是 xampp 等? 【参考方案1】:

试试下面的

打开config.php 并进行以下替换

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

$config['index_page'] = ""

在某些情况下,uri_protocol 的默认设置无法正常工作。直接替换

$config['uri_protocol'] ="AUTO"

通过

$config['uri_protocol'] = "REQUEST_URI"

HTACCESS

RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 

希望对您有所帮助。

【讨论】:

【参考方案2】:

在你的 codeIgniter 项目的主目录中试试这个 htaccess。它似乎在 xampp 和 wamp 中运行良好。

Options +FollowSymLinks
Options -Indexes
DirectoryIndex index.php
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA]

config.php

$config['base_url'] = 'http://localhost:8080/IDS/';
$config['index_page'] = "";
$config['uri_protocol'] = 'REQUEST_URI';

请记住,文件名和类的首字母应为大写,其余为小写。 refer

更多 htaccess 示例here

【讨论】:

【参考方案3】:

注意:我在 Ubuntu 上,所以如果你在另一个发行版上,这里的路径可能会改变。

我尝试了所有 .htaccess 建议,但似乎没有一个有效,所以我开始认为这不是问题所在。然后它击中了我,apache.conf 文件。不管你有什么 .htaccess,如果那个文件限制了覆盖,你就无能为力了。

所以我去了/etc/apache2/ 并编辑了apache2.conf 文件添加了这个:

<Directory /var/www/html/your-project-folder>
    AllowOverride All
    Require all granted
</Directory>

如上所述,将application/config/config.php 中的$config['index_page'] = index; 更改为$config['index_page'] = '';

顺便说一句,我的 .htaccess 看起来像这样:

RewriteEngine On
RewriteRule ^(application) - [F,L]
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule .* index.php/$0 [PT,L]

别忘了重启 apache。

【讨论】:

【参考方案4】:

请尝试在 config.php 文件中将 index_page 设置为空白

$config['index_page']= "";

另外请更改 .htaccess 文件:

RewriteEngine on
RewriteCond $1 !^(index\.php|resources|robots\.txt)
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php/$1 [L,QSA] 

【讨论】:

【参考方案5】:

在您的 .htaccess 文件中尝试以下操作

<IfModule mod_rewrite.c>
# Turn on URL rewriting
RewriteEngine On

# If your website begins from a folder e.g localhost/my_project then 
# you have to change it to: RewriteBase /my_project/
# If your site begins from the root e.g. example.local/ then
# let it as it is
RewriteBase /

# Protect application and system files from being viewed when the index.php is missing
RewriteCond $1 ^(application|system|private|logs)

# Rewrite to index.php/access_denied/URL
RewriteRule ^(.*)$ index.php/access_denied/$1 [PT,L]

# Allow these directories and files to be displayed directly:
RewriteCond $1 ^(index\.php|robots\.txt|favicon\.ico|public|assets|css|js|images)

# No rewriting
RewriteRule ^(.*)$ - [PT,L]

# Rewrite to index.php/URL
RewriteRule ^(.*)$ index.php/$1 [PT,L]
</IfModule>

更多详情,您可以访问here

【讨论】:

以上是关于PHP - 没有 index.php,codeigniter URL 不起作用 - 找不到对象的主要内容,如果未能解决你的问题,请参考以下文章

网站网址可以在有或没有 index.php 的情况下访问 [重复]

Wordpress没有使用home.php而是使用index.php作为帖子页面。

重定向时没有删除 index.php - codeigniter

没有 URL 重写的 CakePHP:将 / 重定向到 index.php

在没有 index.php 的情况下,codeigniter 重定向不起作用?

index.php 在下载文件时没有打开和运行