Apache - 子域,mod_rewrite和virtualdocumentroot

时间:2010-11-01 12:18:16

标签: apache mod-rewrite subdomain virtual-directory wildcard-subdomain

任何人都可以建议我如何实现以下目标(我无法使用mod_rewrite或virtualdocumentroot烹饪解决方案)::

1)允许我网站上的任何子域名(* .mysite.com不应该给出404错误)和

2)确保用户在浏览器中看到的URL是他输入的内容。

3)没有重定向

(因此,如果用户输入avalidsubdomain.mywebsite.com,页面应该从相应的目录中提供。此时我并不关心我需要保留的目录结构。只要它有效,任何事情都可以。另一方面,如果他输入了一些关于doesnotexist.mywebsite.com的内容,他就不应该获得404,而应该被带到网站上的自定义页面。)

例如,请参阅blogspot.com上的任何子域都可以正常工作 - 例如http://dsadsadsdsadsd.blogspot.com/。 (当然谷歌是谷歌,他们可以编写自己的网络服务器)。但我确信在Apache中可以做到这么简单。

注意: 1)每次添加有效的子域时,我都不想添加/更改apache配置或.htaccess。

2)从我在各种线程上看到的内容,我可以将mod_rewrite用于一个catchall子域规则,但是,用户在broser中看到的URL不会保持不变。

谢谢!

欢呼声,

JP


我问了一个相关的问题,那里的答案似乎解决了这个问题。 如果有人看到这个问题,请在此处提及:

mod_rewrite regex (too many redirects)

4 个答案:

答案 0 :(得分:1)

您想要设置的方案可以使用{http {3}}来实现Apache httpd。

您只需要创建一个默认虚拟主机来捕获不存在的子域,有关详细信息,请参阅mod_vhost_alias

示例:

<VirtualHost _default_:80>
  ServerName example.com
  DocumentRoot /srv/www/custom_page
  # ...
</VirtualHost>

UseCanonicalName Off
VirtualDocumentRoot /srv/www/%1/%2+

答案 1 :(得分:0)

您所描述的内容可以通过DNS完成,您必须使用wildcards将其删除。

答案 2 :(得分:0)

它的价值:

我已经an approach that uses mod_rewriteVirtualDocumentRoot /.../%0一起将不存在的子域重定向到相应的根域。这会更新客户端URL,但您可以使用[P] RewriteRule标志来隐藏它。如示例中那样重定向到占位符页面也是微不足道的。

设置完成后,您无需编辑任何配置设置即可添加或删除域或子域。

答案 3 :(得分:0)

你的httpd.conf中的

添加

<VirtualHost *:80>
        ServerName default
        ServerAlias *
        VirtualDocumentRoot /htdocs/%-2.0.%-1/%-3
</VirtualHost>

请将您的域名指向www.example.com /htdocs/example.com/www /

然后在你的rooit文件夹中添加一个.htaccess文件: /htdocs/example.com/.htaccess包括: 现在,每个不存在的域都将重定向到www,状态代码为301(Permantly Moved)。您可以将WWW更改为您想要的任何内容。

# Enable Rewrite Engine
RewriteEngine on

# Rewrite all non-existing sites to www.
RewriteCond %{HTTP_HOST} example\.com$
RewriteRule ^.*$ http://www.example.com%{REQUEST_URI} [R=301,L]

我希望这会对你有所帮助。