【问题标题】:Codeigniter 4 MultisiteCodeigniter 4 多站点
【发布时间】:2021-06-22 10:32:28
【问题描述】:

我已经在 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>

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

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

【问题讨论】:

  • 请将您的服务器配置/虚拟主机容器添加到您的问题中。您是否尝试对两个主机名使用单个 vHost 来执行此操作(如这里所示)?或者为每个主机名单独的 vHost 配置(当前答案推荐和假设)?
  • 但是您看到的错误表明您缺少关闭 &lt;/IfModule 指令 - 这在您发布的指令中并不明显。
  • 您还应该完全删除 RewriteBase 指令。 RewriteBase 指令的参数是 URL 路径,而不是文件系统路径。见httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritebase

标签: .htaccess multisite codeigniter-4


【解决方案1】:

我一直从事托管工作,从来不需要进行 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/黑色

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

【讨论】:

  • 那么,您没有使用 any 虚拟主机?
  • 我尝试使用虚拟主机没有成功。我会再尝试。现在,如果我调用现有文件,我的 .htaccess 将不起作用。即使我把 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d
  • 如果您想拥有多个“独立”网站,虚拟主机非常重要。这些RewriteCond 指令需要在上面代码中的每个RewriteRule 之前进行。
【解决方案2】:

这真的不应该在您的 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 安装执行这些配置。

【讨论】:

  • 感谢您的回复。我遵循了您的迷你教程,但似乎没有任何改变:调用 blue.ddns.net 和调用 black.ddns.net 我总是看到相同的东西:我的 /var/www/html(可浏览)文件夹。我已经尝试过在 /var/www/html 文件夹中使用和不使用 .htaccess 文件
  • 这个答案确实假设您已经安装了 SSL 证书和另一个 &lt;VirtualHost *:443&gt; 容器实际上可以完成工作。 &lt;VirtualHost *:80&gt; 容器上的其他注释已发布... ServerAlias 指令是多余的。你不应该使用Allow from all 和 Require all granted。假设这是 Apache 2.4,那么只需要后者。 Options None - 应该是 Options FollowSymLinks,因为正在使用 mod_rewrite。但是这里不需要mod_rewrite(你当然不需要检查SERVER_NAME),一个简单的Redirect就足够了,而且是首选。
  • @MrWhite:感谢您的回答。是的,我已经安装了 Let'sEncrypt,它具有从 HTTP 到 HTTPS 的永久重定向
  • @360degree 根据此处发布的建议,/var/www/html 不应该是可浏览的,并且您的 .htaccess 文件应该进入相应的 DocumentRoot,而不是 /var/www/html。 (显然,您需要相应地调整您的 .htaccess 文件。)
  • @MrWhite:我目前不再有 htaccess(没有任何改变)。抱歉,这是我第一次更深入地处理 Apache。我真的需要一只手来正确地创建它。只要有需要就创建它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 2013-03-01
  • 2023-03-06
相关资源
最近更新 更多