别名在域的 VirtualHost 中不起作用但在本地主机上本地起作用?

别名在域的 VirtualHost 中不起作用但在本地主机上本地起作用?

我已经使用域名虚拟主机在本地创建了一个虚拟主机,其中我使用了一个指向同一服务器(我的本地主机)上的另一个项目的目录的别名,如下所示:

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot /var/www/Proj1/public

    ServerName www.proj1.dev

    Alias /billing /var/www/Proj2/public

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory /var/www/Proj1/public/>
        AllowOverride All
    </Directory>
</VirtualHost>

现在使用“www.proj1.dev/billing”,我可以访问本地的“Proj2”目录。没问题。在我的“ect/apache2/hosts”文件中,IP 地址 127.0.0.1 指向 www.proj1.dev。到目前为止一切都很好。

但是当我对我的 EC2 执行相同的操作并尝试访问“l4.proj.etc/billing”时,它当然不使用“127.0.0.1”,而是使用可公开访问的实际 IP 地址,这给了我 500 错误。我不知道问题出在哪里。这是我在 EC2 上的虚拟主机文件:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/Proj1/public

    ServerName l4.proj.etc                # this is a subdomain

    Alias /billing  /var/www/Proj2/public

    <Directory /var/www/Proj1/public/>
            AllowOverride All
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

我认为别名的工作方式对于本地主机和实际域名可能有所不同。

有人可以在这方面帮助我吗?

这是日志文件的数据:

127.0.0.1 - - [23/Dec/2015:16:34:21 +0500] "GET /billing/plans/img/unknown-plans.png HTTP/1.1" 304 180 "http://www.www.proj1.dev/billing/index.php/plans" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36"

::1 - - [23/Dec/2015:16:34:28 +0500] "OPTIONS * HTTP/1.0" 200 126 "-" "Apache/2.4.12 (Ubuntu) (internal dummy connection)"



根据@Froggiz 和@bangal 的回答进行编辑

修改 EC2 上的虚拟主机文件

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/Proj1/public

    ServerName l4.proj.etc                # this is a subdomain

    Alias /billing  /var/www/Proj2/public

    <Directory /var/www/Proj2/public>
        Require all granted
    </Directory>

    <Directory /var/www/Proj1/public/>
            AllowOverride All
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Proj2 公共目录中的 .htaccess 文件

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

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

答案1

由于您的别名目录位于之外DocumentRoot,我猜您需要明确允许访问目标目录:

Alias /billing  /var/www/Proj2/public

<Directory /var/www/Proj2/public>
   AllowOverride None
   Require all granted
</Directory>

看这里:https://httpd.apache.org/docs/2.4/en/mod/mod_alias.html

相关内容