.htaccess文件夹/子域重写规则

时间:2016-08-10 10:40:25

标签: apache .htaccess mod-rewrite

我正在经历.htaccess的奇怪行为。

我正在写一个.htaccess规则来转换下面的网址:

我想转换以下网址(其中site是可变的。)

www.xyz.com/domain/site

site.xyz.com/

请注意,/site是在运行时生成的。 (由用户创建)

但我的规则不起作用。

我的代码

Options +FollowSymLinks
RewriteEngine On

RewriteBase /

RewriteCond %{HTTP_HOST} !www.xyz.com$ [NC]
RewriteCond %{HTTP_HOST} ^(www.)?([a-z0-9-]+).xyz.com [NC]
RewriteRule (.*) nono.html?sm=%2 [NC,QSA]

2 个答案:

答案 0 :(得分:0)

您当前的规则似乎是"有点"与你在问题中提出的问题相反,但需要额外的扭曲。即。表单site.xyz.com/something的URL将在内部重写为site.xyz.com/nono.html?sm=site。 (?)

重定向 www.xyz.com/domain/sitesite.xyz.com/,正如您所说,那么您可以执行以下操作:

RewriteCond %{HTTP_HOST} ^www\.(xyz\.com)$ [NC]
RewriteRule ^domain/([^/]+)$ http://$1.%1/ [R=302,L]

如果您确定此功能正常,请将302(临时)重定向更改为301(永久)。或者禁用浏览器缓存进行测试。 (301重定向会被浏览器缓存,因此可能会使测试出现问题。)

答案 1 :(得分:0)

我遇到了你的问题。

你的重写规则正好相反......

将此用于您的确切问题

它会起作用

RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST}%{REQUEST_URI}   ^(www\.)?xyz.com/domain/(.+)$(.*)
RewriteRule  (.*)  https://$1.xyz.com/  [L]