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