【问题标题】:.htaccess - 301 redirect if no query string present.htaccess - 如果不存在查询字符串,则 301 重定向
【发布时间】:2012-06-27 22:51:49
【问题描述】:

我想创建一个从页面到同一页面的 301,但目标页面在 url 中有一个参数。浏览器向我显示错误(重定向太多),因此似乎存在无限循环。这是我的代码:

RewriteEngine on
Redirect 301 /index.php http://www.monsite.com/index.php?step=1

谢谢你给我的建议:D

【问题讨论】:

  • 请尝试接受一些较早的问题的答案...您的接受率为 20%,这阻碍了其他人为您提供帮助。

标签: .htaccess redirect http-status-code-301


【解决方案1】:

您需要对重定向进行条件化并在 PHP 中执行以防止无限重定向循环。

index.php:

if(!isset($_GET['step'])){
    header('Location:http://www.monsite.com/index.php?step=1');
}

您配置它的方式将无限期地重定向,因为没有对引擎说“一旦设置了 URL 变量步骤就不要重定向我”。

在 .htaccess 文件中有一些方法可以做到这一点,但由于这些重定向通常是应用程序逻辑,因此直接在脚本中执行似乎更有意义。

或者,对于纯 .htaccess 解决方案:

#if query string is empty

RewriteCond %{QUERY_STRING} ^$

#match on / for root, or .index.php in request and send to query string version 

RewriteRule ^(/|index.php)?$ /index.php?step=1 [R=301,L]

【讨论】:

  • 您好,我只想使用 htaccess...谢谢您的帮助
  • 非常感谢,这段代码将网页的任何页面重定向到index.php?step=1,你能看一下吗?
  • 我让它在我的环境中工作,只重定向 index.html 和 root /。你确定你没有忘记重写规则中的 $ 吗?这确保了请求字符串在这些字符串之后直接终止。你能给我重定向错误的网址吗?您是否还有其他可能发生冲突的重写规则/条件?
  • .htaccess 只包含你的代码,我完全复制了它... :|
  • 哦,对不起,我只是理解这个问题,事实上这不是 index.php 而是 product.php 这就是为什么你明白我想重定向 root。但我不会重定向根目录,只会将 product.php 重定向到 product.php?step=1。我必须改变什么(用 product.php 替换 index.php?)很抱歉,感谢您的耐心等待。
猜你喜欢
  • 1970-01-01
  • 2012-10-15
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-18
相关资源
最近更新 更多