如果用户使用 IP 而不是(子)域名,则重定向

如果用户使用 IP 而不是(子)域名,则重定向

我有一台 Apache 服务器,如果连接到我网站的每个用户不使用特定域(在本例中为子域),我想重定向这些用户。因此,如果我使用 IP,我想重定向到其他地方;如果我使用特定域,我想访问我的网站。

我已经找到了VirtualHost,但我在谷歌上搜索的所有内容都没有帮助。我必须在 中创建一个新文件吗sites-available

所以我创建了文件并将其命名为重定向。如果我现在打开我的网站,我会被重定向,但它应该显示正确的网站。我做错了什么?这是我的文件内容:

000-默认.conf

<VirtualHost *:80>
#ServerName www.example.com
ServerAdmin webmaster@localhost
Redirect 301 / http://www.example.com/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

重定向配置文件

<VirtualHost *:80>
ServerName http://www.examplesubdomain.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

答案1

为了实现这一点,我建议您在 中拥有两个站点sites-available

首次安装 Apache 后,你会发现已自动创建了一个默认站点。文件的名称可能因发行版而异。在 Ubuntu 系统上,文件名为000-default.conf

在此,VirtualHost您可以简单地Redirect将所有用户重定向到真实域名。

此外,您还需要创建另一个包含您真实网站的文件。VirtualHost您需要在其中ServerName指定您希望用户使用的域名。

任何使用第二个文件中的域名的用户都将由该文件提供服务VirtualHost。其他所有人将由默认服务VirtualHost(即简单的重定向)提供服务。

它无法与问题中写到的网站兼容,是因为你的语法ServerName错误。删除http://它就可以了。

答案2

我的解决方案是使用动态主机(在 000-default.conf 中):

# First, www.* config
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerAlias www.*
    VirtualDocumentRoot /var/www/%2+

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

    UseCanonicalName    Off

    <Directory /var/www>
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
    </Directory>
</VirtualHost>

# Then, * config
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerAlias *
    VirtualDocumentRoot /var/www/%0

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

    UseCanonicalName    Off

    <Directory /var/www>
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
    </Directory>
</VirtualHost>

这样,您只需在 /var/www 中创建所有(子)域文件夹,Apache 将根据请求的 URL 提供文件。只需创建以您的 IP 命名的文件夹即可。使用两个 VirtualHosts 可避免必须为每个域(您提供 www.* 内容的位置)创建 www.* 符号链接。

相关内容