New*_*nab 3 apache subdomain .htaccess mod-rewrite redirect
我在这里已经阅读了很多关于这方面的问题和答案,但似乎没有解决我的具体问题.
我想将任何子域重定向到子目录以匹配.
所以: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,我收到重定向循环错误.
如果有人能指出我正确的方向,我将不胜感激!我没有改变似乎工作......
小智 8
首先,确保正确配置了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重写子域到目录 
http://httpd.apache.org/docs/2.2/mod/mod_proxy.html  
http://httpd.apache.org/docs/2.2/rewrite/flags.html#flag_p 
这可以在.htaccess没有mod_proxy提供服务器配置为允许通配符子域的情况下实现.(我通过创建手动命名的子域在JustHost中实现了这一点*).将其添加到您的.htaccess文件中:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.website\.com$
RewriteCond %{HTTP_HOST} ^(\w+)\.website\.com$
RewriteCond %{REQUEST_URI}:%1 !^/([^/]+)/([^:]*):\1
RewriteRule ^(.*)$ /%1/$1 [QSA]
| 归档时间: | 
 | 
| 查看次数: | 13201 次 | 
| 最近记录: |