Php .htaccess Apache mod rewrite规则始终提供重定向循环

Php .htaccess Apache mod rewrite规则始终提供重定向循环,php,apache,.htaccess,mod-rewrite,redirect,Php,Apache,.htaccess,Mod Rewrite,Redirect,我通常很擅长编写apache重定向,但这个特定客户机的服务器一直给我带来问题:c 我试图将所有子页面重定向到主域,但我总是得到一个无限重定向循环 这是我的.htaccess文件-我做错了什么 RewriteEngine on RewriteCond %{HTTP_HOST} ^example\.com$ [OR] RewriteCond %{HTTP_HOST} ^www\.example\.com$ RewriteRule ^test$ "http\:\/\/example\.com\/" [

我通常很擅长编写apache重定向,但这个特定客户机的服务器一直给我带来问题:c

我试图将所有子页面重定向到主域,但我总是得到一个无限重定向循环

这是我的.htaccess文件-我做错了什么

RewriteEngine on
RewriteCond %{HTTP_HOST} ^example\.com$ [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule ^test$ "http\:\/\/example\.com\/" [R=301,L]
RewriteCond %{REQUEST_URI} !"^/$"
RewriteRule ^.*$ "http\:\/\/example\.com\/" [R=301,L]
哇,无限!但是如果我做了这样的事情:

RewriteRule ^test$ "http\:\/\/example\.com\/" [R=301,L]
这将重定向到和bam,它工作了

任何指导都将不胜感激。谢谢

//编辑

问题是我们有一个邮件列表插件,它向用户发送确认电子邮件。单击确认电子邮件中的确认按钮后,用户将被重定向回我们的站点,并附加一个长查询字符串。查询字符串是生成的,因此它永远不会是相同的

以下是其中一个查询字符串的示例:

http://example.com/?has_media=false&fan=https%3A%2F%2Fapp.topspin.net%2Fapi%2Fv1%2Ffan%2Fshow%2F63451204%3Fartist_id%3D12053%26auth%3D96419cab29f59a342cde9ca3c0c20b58&campaign=https%3A%2F%2Fapp.topspin.net%2Fapi%2Fv1%2Fartist%2F12053%2Fcampaign%2F10151864
//编辑2


我尝试了@Jon Lin的例子,页面加载异常,但确实加载了。基本上,在某些浏览器中加载了正确的域,但资产CSS和图像没有加载,网络检查器也将这些路径显示为永久移动:s

尝试将上一条规则更改为:

RewriteRule !^(?:index\.(html?|php)|)$ http://example.com/ [R=301,L]
原因是,在目录索引映射到index.php之类的东西之后,规则会再次被重新处理,从而产生额外的重定向


请注意,查询字符串仍将位于末尾。这是因为在重写规则中无法匹配查询字符串。您需要匹配%{QUERY\u STRING}变量。为了摆脱查询字符串,您需要添加一个?到底http://example.com/.

展示一些您想要的URL、原始URL和重定向URL的示例。我认为问题在于您试图重定向所有子页面,包括index.php/html,它被重定向到无限远的自身。我可以问一下为什么??你真的想把example.com或www.example.com改写成example.com吗?也许你所需要做的就是移除第一个condition@PeterKraussJhecht和以前的人用更多的细节和例子更新了我的问题不幸的是,这对我不起作用。我会详细更新我的答案