路由在CodeIgniter中不适用于除首页以外的其他路由

时间:2019-01-03 20:06:02

标签: php codeigniter-3

我正在尝试在Kubuntu O.S.下的localhost中运行CodeIgniter。 对于主URL(http://localhost),它可以正常工作。但是,当我尝试访问另一个URL(http://localhost/cliente)时,他说“在此服务器上找不到请求的URL / cliente。”。

我的.htaccess文件:

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

routes.php文件:

$route['default_controller'] = 'welcome';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;

$route['cliente'] = 'clientes';
$route['produto'] = 'produtos';

在application / controllers文件夹中有Clientes.php和Produtos.php文件。

在config.php中:$ config ['index_page'] ='';

最不寻常的是,当我调用Welcome控制器时,它起作用了。只有在我尝试调用其他控制器时才起作用。像http://localhost/cliente

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

在Linux上使用lamp与在Windows上使用xampp有点不同,您必须手动启用一些设置。

您的重写规则将不起作用,因为默认情况下mod_rewrite被禁用,您必须先启用它。

步骤1-启用mod_rewrite

为了让Apache理解重写规则,我们首先需要激活mod_rewrite。它已经安装,但是在默认的Apache安装中已禁用。使用a2enmod命令启用该模块:

sudo a2enmod rewrite

这将激活模块或警告您该模块已启用。要使这些更改生效,请重新启动Apache。

sudo systemctl restart apache2

mod_rewrite现在已完全启用。在下一步中,我们将建立一个.htaccess文件,用于定义重定向的重写规则。

第2步-设置.htaccess

.htaccess文件使我们可以修改重写规则,而无需访问服务器配置文件。因此,.htaccess对Web应用程序的安全性至关重要。文件名之前的句点可确保文件被隐藏。

默认情况下,Apache禁止使用.htaccess文件来应用重写规则,因此首先您需要允许对该文件进行更改。使用nano或您喜欢的文本编辑器打开默认的Apache配置文件。

sudo nano /etc/apache2/sites-available/000-default.conf

在该文件中,您会发现从第一行开始的<VirtualHost *:80>块。在该块内部,添加以下新块,以便您的配置文件如下所示。确保所有块都正确缩进。

/etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
    <Directory /var/www/html>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
    </Directory>

    . . .
</VirtualHost>

保存并关闭文件。要使这些更改生效,请重新启动Apache。

sudo systemctl restart apache2

现在,在Web根目录中创建一个.htaccess文件。

sudo nano /var/www/html/.htaccess

在新文件的顶部添加此行以激活重写引擎。

/var/www/html/.htaccess
RewriteEngine on

保存文件并退出。

您现在有了一个可操作的.htaccess文件,可用于管理Web应用程序的路由规则。

答案 1 :(得分:0)

我怀疑您的.htaccess文件有问题。这是我的版本

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

希望这会有所帮助,谢谢。