.htaccess重写规则导致无限循环

时间:2013-06-27 19:25:46

标签: apache .htaccess redirect mod-rewrite url-rewriting

如果任何通配符作为子域条目点击浏览器,我希望我的.htaccess文件重定向到某个页面。即我想要

  

SAM .xyz.com

重定向到

  

sam.xyz.com/view.php?id=的 SAM

我正在使用以下重写规则进行重定向。

  

RewriteEngine On

     

RewriteCond%{HTTP_HOST}!^ www.xyz.com [NC]

     

RewriteCond%{HTTP_HOST} ^([^。] +)。xyz.com

     

RewriteRule ^(。*)$ /view.php?id =%1 [L,R]

我面临的问题是它没有转移到新域保持查询字符串而是生成无限循环

  

SAM .xyz.com

重定向到

  

的http:// SAM .xyz.com / view.php ID = SAM

但是没有无限循环就不会移动到url上面。 请帮助我。 提前谢谢,

2 个答案:

答案 0 :(得分:3)

您应该添加重定向条件以防止重定向循环:

RewriteCond %{REQUEST_URI} !^/view\.php

整个代码将是:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.xyz.com [NC]
RewriteCond %{HTTP_HOST} ^([^.]+).xyz.com
RewriteCond %{REQUEST_URI} !^/view\.php
RewriteRule ^(.*)$ /view.php?id=%1 [L,R]

答案 1 :(得分:1)

您正在重定向到:prefix.domain.tld / view.php?id = prefix

确保网址不包含:id = prefix。

此解决方案可以防止有人打电话给网址:aaa.example.com/view.php?id = bbb

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.xyz.com [NC]
RewriteCond %{HTTP_HOST} ^([^.]+).xyz.com
RewriteCond %1::%{QUERY_STRING} !^([^:]+)::.*id=\1
RewriteRule ^ /view.php?id=%1 [L,R]

注意:重写规则中的(。*)已过时。

离开R,不要将访问者重定向到网址(/view.php?id=%1)