【问题标题】:my .htaccess redirection fails我的 .htaccess 重定向失败
【发布时间】:2011-12-17 13:13:14
【问题描述】:

htaccess 已启用,我正在运行规范化(无 www 到 www。)

我正在尝试使用 htaccess 执行以下操作

www.domain.com/page.php?i=Page1
www.domain.com/page.php?i=Page2

www.domain.com/Page1
www.domain.com/Page2

我尝试使用此代码 sn-p,到目前为止没有运气:

rewriterule ^([a-zA-Z0-9_-]+)/$ page.php?i=$1

但是我认为我会走反方向。我找不到这方面的例子。 我有this,但我无法让它工作。

【问题讨论】:

  • 只是一个快速提示;当您编写正则表达式时,使用正则表达式测试工具(如 regex buddy 或 regex coatch)通常可以节省时间,因此您将能够快速找到匹配的内容,如果不匹配,原因。

标签: php .htaccess


【解决方案1】:

试试这个:

RewriteEngine On
RewriteCond %{REQUEST_URI}  ^/page\.php$
RewriteCond %{QUERY_STRING} ^i=([a-zA-Z0-9_-]+)$
RewriteRule ^(.*)$ http://www.domain.com/%1? [R=302,L]

取自:http://www.simonecarletti.com/blog/2009/01/apache-query-string-redirects/

【讨论】:

  • 抱歉,粘贴了错误的部分 - 如果您阅读了该链接上的内容,您应该会明白的。更新了我的答案。
  • 此网页有重定向循环
  • 抱歉,错字 -> 将 RewriteRule 中的美元符号更改为百分号 - 更新了我的答案
  • 我得到:www.domain.com/Page1?i=Page1
  • 重定向后需要去掉查询字符串
【解决方案2】:

您希望www.domain.com/Page1 在浏览器的地址栏中可见,但在内部该网址实际上应该是/page.php?i=Page1。在这种情况下,问题是您的正则表达式中的尾随 /

Rewriterule ^([a-zA-Z0-9_-]+)/$ page.php?i=$1
                             ^---here

您想要的/Page1 url 没有尾部斜杠,但您的重写正则表达式需要一个,因此模式不匹配,并且不会发生重写。尝试删除 / 看看是否有帮助:

Rewriterule ^([a-zA-Z0-9_-]+)$ page.php?i=$1
                             ^---no /

【讨论】:

    【解决方案3】:

    为了解析出查询字符串,您需要在 RewriteCond 中访问它

    # We need this line because /page.php?i=page.php will cause an infinite loop
    RewriteCond %{QUERY_STRING} !i=page.php
    # Now we parse out the value of i from the query string
    RewriteCond %{QUERY_STRING} i=([^&]+)
    RewriteRule ^page.php /%1  [L]
    

    【讨论】:

      猜你喜欢
      • 2012-12-27
      • 2021-09-26
      • 2016-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-21
      • 2021-09-07
      • 2018-08-04
      相关资源
      最近更新 更多