Codeigniter 4 多站点

问题描述

我已经在 Raspbian 上安装了 Codeigniter 4,一切似乎都运行良好。 我的网络目录是 /var/www/html 里面有两个文件夹,其中包含两个不同的 Codeigniter-4 应用程序,我想用它们来调用

  • blue.ddns.net -> /var/www/html/blue/public/index.PHP
  • black.ddns.net -> /var/www/html/black/public/index.PHP

所以我创建了一个 .htaccess 文件放在文件/var/www/html/ 中来处理这两个请求

好吧,我仍处于第 0 步,因为我无法使 .htaccess 文件正常工作。

下面附上文件的副本:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /var/www/html
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ blue/public/index.PHP?/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
    ErrorDocument 404 /index.PHP
</IfModule>

Rewrite 模块被激活 /var/log/apache2/error.log 中出现的错误是:

/var/www/html/.htaccess: Expected </IfModule> before end of configuration,referer: https://blue.ddns.net/

解决方法

这不应该在您的 htaccess 中完成。您应该在 apache 虚拟主机中进行设置。

进入您的网站可用文件夹。

$ cd /etc/apache2/sites-available

创建一个名为 blue.ddns.net.conf 的新虚拟主机

$ touch blue.ddns.net.conf

使用 nano 或您可能喜欢的任何其他文本编辑器打开该文件并添加以下内容。

<VirtualHost *:80>
        ServerAdmin your@email.com
        DocumentRoot /var/www/html/blue/public
        ServerName blue.ddns.net
        ServerAlias blue.ddns.net
        <Directory "/var/www/html/blue/public">
                allow from all
                AllowOverride All
                Options None
                Require all granted
        </Directory>
        RewriteEngine on
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        RewriteCond %{SERVER_NAME} =blue.ddns.net
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

保存并关闭文件。

然后使用以下内容将其添加到您的 apache:

$ sudo micro blue.ddns.net.conf

对其他 codeigniter 安装重复相同的过程并重新启动 apache。

$ sudo service apache2 restart

应该可以。

现在,如果你想覆盖一些配置,你可能会在 htaccess 文件中为每个 codeigniter 4 安装做一些事情。

,

我一直从事托管工作,从不需要进行 Apache 配置。 但现在我发现了 Raspberry/Linux 世界。 由于您的回答,我能够更好地理解问题并通过以下方式解决它(目前):

现在我的配置文件 000-default.conf(端口 80)和 000-default-le-ssl.conf(端口 443)都包含以下代码:

<Directory "/var/www/html">.
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

/var/www/html 中,我使用以下代码创建了一个 .htaccess 文件:

# Disable directory browsing
Options All -Indexes

<IfModule mod_rewrite.c>.
    RewriteEngine On

    RewriteCond "%{HTTP_HOST}" "black\.ddns\.net"
    RewriteRule ^(.*)$ black/public/index.php?/$1 [L]

    RewriteCond "%{HTTP_HOST}" "blue\.ddns\.net"
    RewriteRule ^(.*)$ blue/public/index.php?/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
    ErrorDocument 404 /index.php
</IfModule>

应用程序位于

/var/www/html/blue

和 /var/www/html/black

这是一个非常简单的解决方案,可以满足我的目的。 虽然我觉得不是很优雅 你怎么看?