我有这个配置site.com
<VirtualHost *:443>
ServerAdmin [email protected]
ServerName site.com
ServerAlias www.site.com
DocumentRoot /websites/site.com
Alias /project "/websites/site.com/project/public"
<Directory "/websites/site.com/project/public">
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog /projects/logs/errors/site.com.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
我需要能够执行以下操作:
- 当我去网站,提供的内容
DocumentRoot /websites/site.com
-查看 - 当我去site.com/project,提供以下内容
/websites/site.com/project/public
——查看 - 当我去site.com/project/page,提供以下内容
/websites/site.com/project/public/page.php
——无法正常工作(未找到页面)
以下是 .htaccess 文件/websites/site.com/project/public
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+?)/?$ $1.php [NC,L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteCond %{THE_REQUEST} ^(.+)\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(.+)\.php$ /$1 [R=301,L]
# Block access to hidden files and directories.
RewriteCond %{SCRIPT_FILENAME} -d [OR]
RewriteCond %{SCRIPT_FILENAME} -f
RewriteRule "(^|/)\." - [F]
另外,如果我去site.com/project/page.php
,它可以正常工作,但显然我希望扩展消失。
如果我把所有文件移出民众目录中/websites/site.com/project/public
,并将它们放入其中/websites/site.com/project
,但我不想这样做,因为我希望所有代码都在网站根目录之外。
问题是我需要在互联网上展示该项目,并且由于我还没有域名,所以我需要将其放在现有域的子目录中。
Alias
我知道虚拟主机配置有问题,也许有问题.htaccess
,但我不知道是什么问题。
任何帮助都值得赞赏,
谢谢你!
答案1
我设法通过移入来解决这个问题/websites/site.com/project
,/websites/project
基本上是将整个网站移出 的子目录site.com
。
然后在配置文件中,我替换了所有路径以指向这个新位置,一切都正常了。
我不能说我完全理解为什么。
答案2
根据 Apache 文档,您不能在同一个上下文中组合 Alias 和 Rewrite 指令 - Alias 指令将始终被忽略。