【问题标题】:.htaccess redirection for wildcard subdomain.htaccess 重定向通配符子域
【发布时间】:2018-08-14 11:41:15
【问题描述】:

我有一个域 example.com 并创建了一个通配符子域以将其指向 DOC 根

我想要它,这样任何人都可以使用 name.example.com,然后让它在末尾添加他们的会员 ID name.example.com/a/5

我创建了以下 .htaccess 代码

RewriteCond %{HTTP_HOST} ^name\.example\.com$ [NC]

RewriteRule ^(.*)$ http://www.name.example.com/a/1/$1 [L,R=301,QSA]

这是正确重定向到www.name.example.com/a/1/,但我需要它作为name.example.com/a/1/

当我从 .htaccess 规则中删除 www 时,它正在进行重定向循环

webserver 是 apache

【问题讨论】:

  • uri /a/1 中的a 是固定路径吗?
  • 是的,网址中的“a”将被修复

标签: apache .htaccess url-rewriting wildcard-subdomain


【解决方案1】:

您需要排除您要重定向到的目的地。

试试:

RewriteCond %{HTTP_HOST} ^name\.example\.com$ [NC]
RewriteRule ^((?!a).*)$ http://name.example.com/a/1/$1 [L,R=301,QSA]

或者这个:

RewriteCond %{HTTP_HOST} ^name\.example\.com$ [NC]
RewriteCond %{REQUEST_URI} !^/a [NC]
RewriteRule ^(.*)$ http://name.example.com/a/1/$1 [L,R=301,QSA]

清除浏览器缓存或使用其他浏览器进行测试。

【讨论】:

  • 第一条规则重定向到name.example.com/a/1/index.php,但收到错误“ERR_TOO_MANY_REDIRECTS”第二条规则没有对 URL 进行任何更改...
【解决方案2】:

让我先放上你的代码:

RewriteCond %{HTTP_HOST} ^name\.example\.com$ [NC]
RewriteRule ^(.*)$ http://www.name.example.com/a/1/$1 [L,R=301,QSA]

条件将匹配子域name.example.com/whatever 没有wwww 所以,它会正常工作,因为你重定向到www.name.example.com/whatever,但是如果你从替换中删除www,这意味着你将name.example.com/whatever 重定向到@ 987654328@ 再次重定向它,因为没有限制,例如如果不匹配目录/a/ 执行此规则以及为什么会发生循环。

因此,您应该从 URI 重定向两个排除 /a/ 目录,但要说,URI 不包含 /a/,如下所示:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?name\.example\.com$ [NC]
RewriteRule !/a/   http://name.example.com/a%{REQUEST_URI} [L,R=301]

注意:清除浏览器缓存然后测试。

【讨论】:

  • 我已经使用了它重定向到“toddtest.alor.com/a/1/index.php”的代码,但是收到一条消息“Firefox 检测到服务器正在以永远不会完成的方式重定向该地址的请求。”
猜你喜欢
  • 2012-10-13
  • 1970-01-01
  • 1970-01-01
  • 2018-08-10
  • 2019-01-14
  • 1970-01-01
  • 2012-09-11
  • 2020-07-10
  • 2012-01-21
相关资源
最近更新 更多