【问题标题】:Clean URL Redirect Loop清理 URL 重定向循环
【发布时间】:2010-10-04 16:27:35
【问题描述】:

我正在尝试在我的网站上创建干净的 URL。现在我成功地配置了 apache,所以像 mysite.com/page 这样的每个请求都可以工作。但我也希望 mysite.com/page.php 的请求将被重定向到 mysite.com/page。我已经在 .htaccess 中设置了环境变量来检查我是否已经被重定向以防止循环,但我仍然得到它们...... 这是.htaccess:

<IfModule mod_rewrite.c>
Options +FollowSymlinks

RewriteEngine On
RewriteBase /

# set the variable
RewriteRule ^$ - [L]
RewriteRule ^(.*)$ $1 [E=REWROTE:0]

# this works fine
# make mysite.com/page work and set REWROTE variable to 1
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L,E=REWROTE:1]

# but if i enable this, i get redirected and then stuck in a loop
# redirect mysite.com/page.php to mysite.com/page , but only if REWROTE not 1
#RewriteCond %{ENV:REWROTE} !^1$
#RewriteRule ^(.*)\.php$ $1 [R=301,L]

谢谢!

【问题讨论】:

  • 欢迎堆栈溢出。感谢您清楚地表达您的问题,提供代码,并展示哪些有效,哪些无效。如果您的 apache 日志中有有用的信息,请也发布。有时,当您看到日志时,重定向问题会变得更加明显。
  • 很遗憾,我无法获得此类信息。

标签: apache .htaccess url-rewriting


【解决方案1】:

在您现有的重写规则上方添加此规则,以在请求已被重定向一次时停止重定向 (ref):

RewriteCond %{ENV:REDIRECT_STATUS} 200
RewriteRule .* - [L]

【讨论】:

  • 宾果游戏!像魅力一样工作,不需要环境变量。
【解决方案2】:

您可以检查请求行中最初请求的内容:

RewriteCond %{THE_REQUEST} ^[A-Z]+\ (/[^\ ]*)\.php[?\ ]
RewriteRule \.php$ %1 [R=301,L]

哦,RewriteCond directive 的第一个参数不是正则表达式,而是一个字符串。所以转义.是错误的。

【讨论】:

    【解决方案3】:

    有什么原因不能使用字符串结尾终止字符 $ 吗?

    RewriteRule ^/(.+)\.php$ /$1
    

    会将 /page.php 重定向到 /page 但不会在 /page 上进行任何重定向。

    从根本上说,使用设置环境变量和添加对 REDIRECT_STATUS 的检查等技术不会非常可靠。

    【讨论】:

      【解决方案4】:

      我发现在这些情况下防止循环的另一种快速而肮脏的方法是添加一个查询字符串,然后检查它在重定向中是否存在。

      RewriteCond %{QUERY_STRING} !a=a
      RewriteRule ^(.*)\.php$ %1 [NC,R=301,L]
      RewriteRule ^(.*)$ $1.php?a=a [NC,L]
      

      在这个网站上找到:http://answers.oreilly.com/topic/542-how-to-properly-redirect-for-maximum-seo/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-14
        • 2015-09-08
        • 1970-01-01
        • 2013-01-25
        • 1970-01-01
        • 1970-01-01
        • 2015-01-26
        • 2018-12-04
        相关资源
        最近更新 更多