如何通过.htaccess 文件根据 url 显示通配符子域名内容?

如何通过.htaccess 文件根据 url 显示通配符子域名内容?

如果用户输入example.domain.com,我希望他看到其中的内容www.domain.com/example

另一个例子:

用户会请求 example.domain.com/photos/gallery.php?from=var1&no=3,他将会看到里面有什么www.domain.com/example/photos/gallery.php?from=var&no=3

注意:在我的子文件夹(通配符)中我将安装 WordPress,因此我也必须记住该 URL 系统。

答案1

我假设您已经在 DNS 中配置了通配符子域,并且您的服务器配置已配置为接受此类请求。这样这些子域都解析到您的主域的根目录。

我还假设您想将子域保留在浏览器的地址栏中。

.htaccess然后您可以在文档根目录中的文件中执行以下操作:

RewriteEngine On

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain\.com
RewriteRule ^ /%1%{REQUEST_URI} [L]

这排除了 www 子域名被重写。

只要子目录有自己的.htaccess带有 mod_rewrite 指令的文件(正如您对 WordPress 的期望一样),那么您就不需要做任何其他事情了。


更新:但是,如果你没有安装 WordPress在子目录中,即,您在子目录中没有.htaccess包含 mod_rewrite 指令,那么您将需要修改上述代码,通过添加附加条件,以防止重写循环(500 内部服务器错误)。

例如:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^.]+)\.domain\.com
RewriteRule ^ /%1%{REQUEST_URI} [L]

检查REDIRECT_STATUS环境变量的条件通过阻止重写请求来防止重写循环。但是,如上所述,如果 WordPress 已安装在子目录中,则无需这样做。

相关内容