apache - 将通配符子域重定向到子目录,而不更改地址栏中的 URL

标签 apache .htaccess mod-rewrite redirect subdomain

我在这里阅读了很多关于此的问题和答案,但似乎没有一个可以解决我的具体问题。

我想将任何子域重定向到要匹配的子目录。

所以:x.domain.com 会转到 domain.com/x,y.domain.com 会转到 domain.com/y - 但我想在地址栏中的 URL 不更改的情况下执行此操作。

这是我到目前为止所拥有的:

    Options +FollowSymLinks 

    RewriteEngine on

    RewriteBase /

    RewriteCond %{HTTP_HOST} !^(www)\. [NC]

    RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com [NC]

    RewriteRule ^ /%1 [P,L]

但这将我带到一个网站重定向循环,URL 栏中的地址不正确,子域仍然存在。

例如,x.domain.com 将我带到 x.domain.com/x,我收到重定向循环错误。

如果有人能指出我正确的方向,我将不胜感激!我所做的任何更改似乎都不起作用...

最佳答案

首先,确保 apache 配置中的 vhost 配置正确,并且 domain.com 的所有子域都在同一个主机配置中(通配符):

<VirtualHost *:80>
ServerName domain.com
ServerAlias *.domain.com
...

您可以使用以下 htaccess 配置进行重定向:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com
RewriteRule ^(.*)$ http://domain.com/%1/$1 [L,NC,QSA]

现在,如果您打开 asd.domain.com,它应该会将您重定向到 domain.com/asd。
您仍然会遇到问题,重定向在 URL 地址栏中可见。为了防止这种情况,请在您的服务器上启用 mod_proxy(并加载子模块)并将“L”标志与“P”标志交换:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com
RewriteRule ^(.*)$ http://domain.com/%1/$1 [P,NC,QSA]

如果这不起作用,查看 vhost 配置和子域调用的 error.log 内容会有所帮助!

引用:
.htaccess rewrite subdomain to directory
http://httpd.apache.org/docs/2.2/mod/mod_proxy.html
http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_p

关于apache - 将通配符子域重定向到子目录,而不更改地址栏中的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16758204/

相关文章:

php - 为什么这个 .htaccess 文件不显示存在的文件?

java - XMLBeans get_store() 方法返回 null

python - 自定义 flask 应用程序在本地主机上运行良好,但向外部访问者返回 500 响应

java - 如何在 PHP 中执行 java 函数/脚本

wordpress - 访问 WordPress 站点的子文件夹

mod-rewrite - XAMPP Mod_Rewrite 和动态 CSS

python - 关于 Mac OS X Lion 上的 Apache

php - 多个网站可以使用相同的主页和相同的数据库,但不需要更改url?

php - htaccess 阻止访问除 style.php 文件之外的 php 文件

apache - htaccess重写: Grab text after last slash as parameter