我正在努力完成以下任务:
http:// www.example.com/site/abc,http 301重定向到子域名http:// abc.example.com 并在Apache内再次回来: http:// abc.example.com - > /站点/ ABC
我希望在根文件夹的.htaccess中定义两个重定向。
我尝试了几种组合,但遗憾的是没有运气。这就是我现在所拥有的:
# 1. redirect uris which start with www. to the domain without www.
RewriteCond %{HTTP_HOST} ^www\.([^.]+)\.example\.com$
RewriteRule ^(.*)$ http://%1.example.com/$1 [R=301,L]
# 2. rewrite http://host/site/<name>/<uri> => http://<name>.host/<uri>
RewriteCond %{HTTP_HOST} ^example\.com
RewriteCond %{REQUEST_URI} ^/site/([^/]+)
RewriteRule ^(.*) http://%1.example.com/$1 [R=301,NC,L]
# 3. internal redirect to the corresponding directory
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com$
RewriteRule ^(.*)$ site/%1/ [L,NC]
我收到了500服务器错误。
提前致谢!
答案 0 :(得分:0)
为了澄清你原来的问题,你说你需要这个重定向:
http://www.example.com/site/abc => http://abc.example.com/site/abc (**site/abc also present** in destination URL)
但是在你的评论后面你建议:
http://www.example.com/site/abc/xyz/part?id=123&name=lmn => http://abc.example.com/xyz/part?id=123&name=lmn (**site/abc missing** from destination URL)
假设您的评论是正确的,请在.htaccess文件中尝试:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule site/(.+)/(.*) http://$1.example.com/$2 [R=301,L]
这会将www.example.com/site/foo/bar*
重定向到foo.example.com/bar*
,并将301状态重定向到浏览器。
答案 1 :(得分:0)
假设/site/abc/xyz/part
是磁盘上的实际物理文件,请尝试以下操作(如果实际文件有一些扩展名,则附加它)。
还要添加QSA标志,以便追加查询字符串。
# 1. redirect uris which start with www. to the domain without www.
RewriteCond %{HTTP_HOST} ^www\.([^.]+)\.example\.com$
RewriteRule ^(.*)$ http://%1.example.com/$1 [R=301,L,QSA]
# 2. rewrite http://host/site/<name>/<uri> => http://<name>.host/<uri>
RewriteCond %{HTTP_HOST} ^example\.com
RewriteCond %{REQUEST_URI} ^/site/([^/]+)
RewriteRule ^(.*) http://%1.example.com/$1 [R=301,NC,L,QSA]
# 3. internal redirect to the corresponding directory
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com$
RewriteRule ^(.*)$ site/%1/ [L,NC,QSA]