Apache 虚拟主机别名:内部重写页面不起作用

Apache 虚拟主机别名:内部重写页面不起作用

我有这个配置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>

我需要能够执行以下操作:

  1. 当我去网站,提供的内容DocumentRoot /websites/site.com-查看
  2. 当我去site.com/project,提供以下内容/websites/site.com/project/public——查看
  3. 当我去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 指令将始终被忽略。

https://httpd.apache.org/docs/2.4/mod/mod_alias.html

相关内容