如果用户使用IP而不是(子)域,则redirect

我有一个Apache服务器,我想redirect每个连接到我的网站的用户,如果他们不使用特定的域,在这种情况下,一个子域。 所以,如果我使用IP我想要redirect到其他地方,如果我使用特定的域我想获得访问我的网站。

我已经find了VirtualHost但是我所有的search引擎都没有帮助。 我必须在sites-available创build新文件吗?

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

000-default.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> 

redirect.conf

 <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> 

为了达到这个目的,我build议你在sites-available有两个站点sites-available

一旦你最初安装了Apache,你可以期望find一个自动创build的默认站点。 文件的名称可能因分布而异。 在Ubuntu系统上,它是000-default.conf

在这个VirtualHost您可以简单地使用Redirect来将所有用户redirect到一个真实的域名。

此外,您需要与您的真实网站创build另一个文件。 在这个VirtualHost您需要使用ServerName来指定您希望用户使用的域名。

任何在第二个文件中使用域名的用户都将由该VirtualHost 。 每个人都将由默认的VirtualHost ,它只是redirect。

它不能在你的问题中写入网站的原因是,你得到了ServerName的语法错误。 删除http:// ,它应该工作。

我的解决scheme是使用dynamic主机(在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中创build所有(子)域文件夹,Apache将根据请求的URL来提供文件。 只需创build名为您的IP的文件夹,它将工作。 使用两个VirtualHost来避免为每个域(为服务www。*内容)创buildwww。*符号链接。