我在这里阅读了很多关于此的问题和答案,但似乎没有一个可以解决我的具体问题。
我想将任何子域重定向到要匹配的子目录。
所以: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/