apache 重写以将文件夹分配给域

apache 重写以将文件夹分配给域

请给我指出正确的方向。

我正在使用 .htaccess 在我的服务器上设置域。

我需要 domain.com 来访问 /domain.com/* 文件夹中的文件。如果文件不存在,则加载 /domain.com/index.php,而 domain.com/images/image.jpg 应该加载文件:/domain.com/images/image.jpg

一件事是,它应该加载所有内容而不向浏览器发送 302“文件已移动”通知。

感谢您的帮助!

答案1

如果你有很多域,或者即使你只有几个域,但它们的配置都大体相同,那么动态海量虚拟主机是为. 而制作的。类似这样的内容可以放在你的httpd.conf文件中(或者放在 中包含的文件中httpd.conf):

UseCanonicalName Off
VirtualDocumentRoot /var/www/%0/htdocs
ErrorLog /var/www/logs/error_log
CustomLog /var/www/logs/access_log combined

我还建议

DirectoryIndex index.php

index.php如果客户端未指定文件名,则加载目录中的文件。

答案2

您应该为每个要映射到文件路径的域创建一个虚拟主机,并将每个虚拟主机的 DocumentRoot 指定为文件系统上的实际路径。然后,您需要确保您有一个默认虚拟主机,以便所有其他未设置的域请求都将使用默认虚拟主机。最后,您需要创建一个自定义 404 错误处理程序,这样如果请求的文件不存在,它将提供替代内容。您需要创建一个名为 custom_404.php 的 php,它显示通用消息和您的 /images/image.png。

# Default Domain (Undefined domains will fall back to this)
<VirtualHost *:80>
    ServerAlias www.defaultdomain.com
    DocumentRoot /var/www/default/htdocs
    ErrorDocument 404 /custom_404.php
    ErrorLog /var/www/default/logs/error_log
    CustomLog /var/www/default/logs/access_log combined
</VirtualHost>

# domain1.com
<VirtualHost *:80>
    ServerName domain1.com
    ServerAlias www.domain1.com
    DocumentRoot /var/www/domain1.com/htdocs
    ErrorDocument 404 /custom_404.php
    ErrorLog /var/www/domain1.com/logs/error_log
    CustomLog /var/www/domain1.com/logs/access_log combined
</VirtualHost>

# domain2.com
<VirtualHost *:80>
    ServerName domain2.com
    ServerAlias www.domain2.com
    DocumentRoot /var/www/domain2.com/htdocs
    ErrorDocument 404 /custom_404.php
    ErrorLog /var/www/domain2.com/logs/error_log
    CustomLog /var/www/domain2.com/logs/access_log combined
</VirtualHost>

希望这可以帮助!

-凯文

答案3

您需要使用虚拟主机来组织这些内容。以下是示例虚拟主机文件。

<VirtualHost *:80>
    ServerName example.net
    ServerAlias www.example.net
    ServerAdmin [email protected]
    DocumentRoot /var/www/vhosts/www.example.net/html
    ErrorLog /var/www/vhosts/www.example.net/logs/errors.log
    Customlog /var/www/vhosts/www.example.net/logs/access.log combined

</VirtualHost>

将此文件放在 /etc/httpd/conf.d/ 中并将其命名为 vhost_example.net.conf

然后在 /etc/httpd/conf/httpd.conf 中添加例如最后一行

包括 /etc/httpd/conf.d/vhost_example.net.conf

(或者只是包含 /etc/httpd/conf.d/*.conf)并且在 httpd.conf 文件中,记得取消注释此行

名称虚拟主机 *:80

相关内容