【问题标题】:Apache website conversion from alias to virtualhostApache 网站从别名到虚拟主机的转换
【发布时间】:2022-06-14 15:39:24
【问题描述】:

我必须接管一个已由不再存在的同事配置的内部 Web 服务器。我们的开发团队要求我将应用程序 URL 从 别名 转换为 Virtualhosts(子域命名)系统。例如:

https://srv-intra.mydomain.fr/basecolldev

应该变成

https://basecolldev.mydomain.fr

环境规范:

  • Linux OpenSUSE Leap 15.3
  • 服务器版本:Apache/2.4.51 (Linux/SUSE)
  • PHP 7.4.6 (cli) (NTS)

问题描述:我可以连接到https://basecolldev.mydomain.fr,尽管在 access_log 文件中显示了一些 404 错误(请参阅帖子末尾)。当单击重定向到https://basecolldev.mydomain.fr/login 的登录按钮时,我会看到一个 404 错误页面。当我手动将 URL 修改为https://basecolldev.mydomain.fr/index.php/login 时,找到并正确显示了登录页面。这意味着/index.php 不是主页连接所必需的,而是用于浏览网站的。我需要永久阻止 /index.php 后缀出现在 URL 中。

我在下面描述了到目前为止我已配置的内容以及仍然无法使用的内容。

我首先创建了一个新的 vhost 文件/etc/apache2/vhost.d/basecolldev-ssl.conf

<VirtualHost basecolldev.mydomain.fr:443>

    DocumentRoot "/var/www/BaseCollDev/public"
    ServerName basecolldev.mydomain.fr
    ErrorLog /var/log/apache2/basecolldev-error_log
    TransferLog /var/log/apache2/basecolldev-access_log
    LogLevel alert rewrite:trace8

    <Directory /var/www/BaseCollDev/public>
         #Order allow,deny
         #allow from all
         #AllowOverride All
         Require all granted
         Options -Indexes -Includes -ExecCGI -FollowSymlinks
    </Directory>

</VirtualHost>

然后我在文件/etc/apache2/default-server.conf 中注释了与应用程序Directory 标记相关的行:

DocumentRoot "/var/www"

<Directory "/var/www">
    Options FollowSymLinks
    AllowOverride None
    <IfModule !mod_access_compat.c>
            Require all granted
    </IfModule>
    <IfModule mod_access_compat.c>
        Order allow,deny
        Allow from all
    </IfModule>
</Directory>

Alias /icons/ "/usr/share/apache2/icons/"
Alias /phpmyadmin "/srv/www/htdocs/phpMyAdmin"

<Directory "/usr/share/apache2/icons">
    Options Indexes MultiViews
    AllowOverride None
    <IfModule !mod_access_compat.c>
        Require all granted
    </IfModule>
    <IfModule mod_access_compat.c>
        Order allow,deny
        Allow from all
    </IfModule>
</Directory>


#<Directory "/var/www/BaseCollDev/public">
#        AllowOverride All
#        Require all granted
#</Directory>

ScriptAlias /cgi-bin/ "/srv/www/cgi-bin/"

<Directory "/srv/www/cgi-bin">
    AllowOverride None
    Options +ExecCGI -Includes
    <IfModule !mod_access_compat.c>
        Require all granted
    </IfModule>
    <IfModule mod_access_compat.c>
        Order allow,deny
        Allow from all
    </IfModule>
</Directory>

<IfModule mod_userdir.c>
    UserDir public_html
    Include /etc/apache2/mod_userdir.conf
</IfModule>


IncludeOptional /etc/apache2/conf.d/*.conf

IncludeOptional /etc/apache2/conf.d/apache2-manual?conf

从与主页连接相关的/var/log/apache2/basecolldev-access_log 文件中提取:

10.9.4.140 - - [03/Jun/2022:11:02:31 +0200] "GET / HTTP/1.1" 200 54206
10.9.4.140 - - [03/Jun/2022:11:02:31 +0200] "GET /build/runtime.d94b3b43.js HTTP/1.1" 200 1505
10.9.4.140 - - [03/Jun/2022:11:02:31 +0200] "GET /build/app.13d64c6c.js HTTP/1.1" 200 236
10.9.4.140 - - [03/Jun/2022:11:02:31 +0200] "GET /build/2.9935185b.css HTTP/1.1" 200 64639
10.9.4.140 - - [03/Jun/2022:11:02:31 +0200] "GET /build/app.6cefaab5.css HTTP/1.1" 200 163752
10.9.4.140 - - [03/Jun/2022:11:02:31 +0200] "GET /build/2.28b18d57.js HTTP/1.1" 200 261268
10.9.4.140 - - [03/Jun/2022:11:02:31 +0200] "GET /build/images/logoEdVBlanc.png HTTP/1.1" 200 6579
10.9.4.140 - - [03/Jun/2022:11:02:31 +0200] "GET /_wdt/b07606 HTTP/1.1" 404 1280
10.9.4.140 - - [03/Jun/2022:11:02:31 +0200] "GET /build/fonts/fa-solid-900.e8a427e1.woff2 HTTP/1.1" 200 78196
10.9.4.140 - - [03/Jun/2022:11:02:32 +0200] "GET /favicon.ico HTTP/1.1" 404 1280
10.9.4.140 - - [03/Jun/2022:11:02:32 +0200] "GET /_wdt/b07606 HTTP/1.1" 404 1280
10.9.4.140 - - [03/Jun/2022:11:02:33 +0200] "GET /_wdt/b07606 HTTP/1.1" 404 1280
10.9.4.140 - - [03/Jun/2022:11:02:34 +0200] "GET /_wdt/b07606 HTTP/1.1" 404 1280
10.9.4.140 - - [03/Jun/2022:11:02:35 +0200] "GET /_wdt/b07606 HTTP/1.1" 404 1280

从与登录页面连接相关的/var/log/apache2/basecolldev-access_log 文件中提取:

10.9.4.140 - - [03/Jun/2022:11:03:47 +0200] "GET /login HTTP/1.1" 404 1280

我在/var/log/apache2/basecolldev-error_log 文件中看不到任何日志。


如有必要,我会附上.htaccess 文件内容。

文件/var/www/.htaccess

# BEGIN WordPress
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
</IfModule>
# END WordPress

文件/var/www/BaseCollDev/public/.htaccess

DirectoryIndex index.php

<IfModule mod_negotiation.c>
 Options -MultiViews
</IfModule>

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_URI}::$0 ^(/.+)/(.*)::\2$
    RewriteRule .* - [E=BASE:%1]

    RewriteCond %{HTTP:Authorization} .+
    RewriteRule ^ - [E=HTTP_AUTHORIZATION:%0]

    RewriteCond %{ENV:REDIRECT_STATUS} =""
    RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ %{ENV:BASE}/index.php [L]
 </IfModule>

 <IfModule !mod_rewrite.c>
     <IfModule mod_alias.c>
        RedirectMatch 307 ^/$ /index.php/
     </IfModule>
 </IfModule>

【问题讨论】:

    标签: apache virtualhost mod-alias


    【解决方案1】:

    您的&lt;Directory "/var/www"&gt; 中有AllowOverride None。这意味着您的 .htaccess 文件,因此您的 mod_rewrite 配置没有被读取。最简单的选项是AllowOverride All(如果需要,您也可以指定特定的覆盖)。

    您还需要允许以下符号链接(删除-FollowSymlinks,可能添加+FollowSymlinks)。

    【讨论】:

      【解决方案2】:

      我最终通过以下方式使其发挥作用:

      文件/etc/apache2/default-server.conf > 将Allow Override 更改为All

      <Directory "/var/www">
          ...
          AllowOverride All
          ...
      </Directory>
      

      文件/etc/apache2/vhosts.d/basecoll-ssl.conf > 删除-FollowSymlinks 选项:

      <VirtualHost basecolldev.mydomain.fr:443>
          ...
          <Directory /var/www/BaseCollDev/public>
              ... 
              Options -Indexes -Includes -ExecCGI
              ...
          </Directory>
      </VirtualHost>
      

      感谢您的帮助,让我走上了正确的道路!

      【讨论】:

      • 给@yakatz赏金,别小气
      【解决方案3】:

      使用 AliasMatch 代替 Alias:

      AliasMatch ^/bar/?(.*) /var/www/bar/$1

      【讨论】:

        猜你喜欢
        • 2011-11-04
        • 2020-10-18
        • 1970-01-01
        • 2013-09-17
        • 2011-02-15
        • 1970-01-01
        • 1970-01-01
        • 2021-03-22
        • 2014-07-20
        相关资源
        最近更新 更多