我有一个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。*符号链接。