将虚拟服务器目录重写为顶级域

时间:2017-10-07 12:03:25

标签: regex mod-rewrite

我想将我的RootDocument目录重写为自己的地址。

例如,我希望能够访问:reinterpret_cast并重定向到http://localhost/FOO。请注意,URL域是静态的,所有子目录域都具有相同的tol级域。我需要在代码块中创建重定向:

http://FOO.dev

因为我已经想出了如何进入我需要的目录,我将如何使用我的逻辑来提取并将我重定向到正确的位置?

1 个答案:

答案 0 :(得分:1)

您需要采用两步方法,因为您必须在要设置的方案中处理两个单独的请求:

这是将客户端重定向到新主机名的规则:

RewriteEngine on
RewriteRule ^/?(\w+)(/?.*)$ http://$1.dev$2 [R=301]

这是该主机内部将规则重新映射到文件系统内部文件夹的规则:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(\w+)\.dev$
RewriteCond /%1 -d
RewriteRule ^/?(.*)$ /%1/$1 [END]

显然,需要为此加载和启用重写。

如果您收到第一个请求(要重定向的请求)的http状态500(“内部服务器错误”),则可能是您使用的是非常旧版本的apache http服务器。在这种情况下,请尝试将[END]标记替换为[L]标记...

以上规则同样适用于http服务器主机配置或动态配置文件。但是,您应该始终更喜欢将此类规则放在http服务器(虚拟)主机配置中,而不是使用动态配置文件(.htaccess样式文件)。这些文件非常容易出错,难以调试,它们确实会降低服务器的速度。只有在您无法控制主机配置(读取:非常便宜的托管服务提供商)或者您的应用程序依赖于编写自己的重写规则(这是一个明显的安全噩梦)的情况下,它们才被支持作为最后一个选项。 )。