【问题标题】:.htaccess continues to internal redirect.htaccess 继续内部重定向
【发布时间】:2014-10-01 10:49:25
【问题描述】:

我完全被 mod_rewrite 的巫毒教弄糊涂了。我们最近重新定位到 aws 上的新 ubuntu 服务器,除了一个 .htaccess 文件外,一切似乎都运行良好。该文件在以前的服务器上运行良好,但在新服务器上运行良好。

相关页面为 testing.sonicdad.com/members/admin/。这应该重定向到 testing.sonicdad.com/members/admin.php 而不是 testing.sonicdad.com/members/admin/index.php

我已将 .htaccess 剥离为该页面的相关代码,但仍然存在问题。请看下面:

RewriteEngine On
RewriteBase /members

## Append Trailing "/" to URL if absent ##
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$   /members/$1/    [L,R=301]

RewriteRule ^admin/$  admin.php [L]

这是日志的相关部分

[rewrite:trace3] [pid 26730] mod_rewrite.c(468): [client 121.202.24.118:13894] 121.202.24.118 - - [testing.sonicdad.com/sid#7f8e16990038][rid#7f8e168600a0/initial] [perdir /var/www/html/members/] strip per-dir prefix: /var/www/html/members/admin/ -> admin/
[rewrite:trace3] [pid 26730] mod_rewrite.c(468): [client 121.202.24.118:13894] 121.202.24.118 - - [testing.sonicdad.com/sid#7f8e16990038][rid#7f8e168600a0/initial] [perdir /var/www/html/members/] applying pattern '^(.*)$' to uri 'admin/'
[rewrite:trace4] [pid 26730] mod_rewrite.c(468): [client 121.202.24.118:13894] 121.202.24.118 - - [testing.sonicdad.com/sid#7f8e16990038][rid#7f8e168600a0/initial] [perdir /var/www/html/members/] RewriteCond: input='/var/www/html/members/admin/' pattern='!-f' => matched
[rewrite:trace4] [pid 26730] mod_rewrite.c(468): [client 121.202.24.118:13894] 121.202.24.118 - - [testing.sonicdad.com/sid#7f8e16990038][rid#7f8e168600a0/initial] [perdir /var/www/html/members/] RewriteCond: input='/members/admin/' pattern='!(.*)/$' => not-matched
[rewrite:trace3] [pid 26730] mod_rewrite.c(468): [client 121.202.24.118:13894] 121.202.24.118 - - [testing.sonicdad.com/sid#7f8e16990038][rid#7f8e168600a0/initial] [perdir /var/www/html/members/] strip per-dir prefix: /var/www/html/members/admin/ -> admin/
[rewrite:trace3] [pid 26730] mod_rewrite.c(468): [client 121.202.24.118:13894] 121.202.24.118 - - [testing.sonicdad.com/sid#7f8e16990038][rid#7f8e168600a0/initial] [perdir /var/www/html/members/] applying pattern '^admin/$' to uri 'admin/'
[rewrite:trace2] [pid 26730] mod_rewrite.c(468): [client 121.202.24.118:13894] 121.202.24.118 - - [testing.sonicdad.com/sid#7f8e16990038][rid#7f8e168600a0/initial] [perdir /var/www/html/members/] rewrite 'admin/' -> 'admin.php'
[rewrite:trace3] [pid 26730] mod_rewrite.c(468): [client 121.202.24.118:13894] 121.202.24.118 - - [testing.sonicdad.com/sid#7f8e16990038][rid#7f8e168600a0/initial] [perdir /var/www/html/members/] add per-dir prefix: admin.php -> /var/www/html/members/admin.php
[rewrite:trace2] [pid 26730] mod_rewrite.c(468): [client 121.202.24.118:13894] 121.202.24.118 - - [testing.sonicdad.com/sid#7f8e16990038][rid#7f8e168600a0/initial] [perdir /var/www/html/members/] trying to replace prefix /var/www/html/members/ with /members
[rewrite:trace4] [pid 26730] mod_rewrite.c(468): [client 121.202.24.118:13894] 121.202.24.118 - - [testing.sonicdad.com/sid#7f8e16990038][rid#7f8e168600a0/initial] add subst prefix: admin.php -> /members/admin.php
[rewrite:trace1] [pid 26730] mod_rewrite.c(468): [client 121.202.24.118:13894] 121.202.24.118 - - [testing.sonicdad.com/sid#7f8e16990038][rid#7f8e168600a0/initial] [perdir /var/www/html/members/] internal redirect with /members/admin.php [INTERNAL REDIRECT]
[rewrite:trace1] [pid 26730] mod_rewrite.c(468): [client 121.202.24.118:13894] 121.202.24.118 - - [testing.sonicdad.com/sid#7f8e16990038][rid#7f8e0ced10a0/subreq] [perdir /var/www/html/members/] pass through /var/www/html/members/admin/index.html
[rewrite:trace1] [pid 26730] mod_rewrite.c(468): [client 121.202.24.118:13894] 121.202.24.118 - - [testing.sonicdad.com/sid#7f8e16990038][rid#7f8e0ced10a0/subreq] [perdir /var/www/html/members/] pass through /var/www/html/members/admin/index.cgi
[rewrite:trace1] [pid 26730] mod_rewrite.c(468): [client 121.202.24.118:13894] 121.202.24.118 - - [testing.sonicdad.com/sid#7f8e16990038][rid#7f8e0ced10a0/subreq] [perdir /var/www/html/members/] pass through /var/www/html/members/admin/index.pl
[rewrite:trace1] [pid 26730] mod_rewrite.c(468): [client 121.202.24.118:13894] 121.202.24.118 - - [testing.sonicdad.com/sid#7f8e16990038][rid#7f8e0ced10a0/subreq] [perdir /var/www/html/members/] pass through /var/www/html/members/admin/index.php

问题似乎是内部重定向。为了阻止这种情况,我尝试将标志修改为 [END]。我还尝试了以下变体:

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

RewriteCond %{ENV:REDIRECT_STATUS} !=200

请有人告诉我如何在应用规则后停止此内部重定向。

谢谢

【问题讨论】:

  • "[INTERNAL REDIRECT" 仅表示 URL 已被重写。您确定这不是重定向到 admin/index.php 文件的 admin.php 吗?
  • @Jon Lin 对不起,我不明白。 .htaccess 正在将 admin/ 重写为 admin.php,这是正确的。但随后 mod_rewrite 似乎再次运行检查 /members/admin.php 并将其修改为 /members/admin/index.php。至少这是我对日志的理解。
  • 这可能是多视图问题吗?试试Options -MultiViews(虽然这只是一个盲目的猜测)。另外,您提到您已经移动了服务器;你检查过 httpd.conf 文件有什么不同吗?
  • 我尝试添加 MultiViews 但没有乐趣

标签: php apache .htaccess mod-rewrite redirect


【解决方案1】:

我们无法解决此问题,因此我们修改了文件夹结构,因此没有副本文件名和文件夹名称,即 admin.php 和 admin/。

这实际上意味着我们有一个更清晰、更具描述性的文件夹结构,我很满意

【讨论】:

    【解决方案2】:

    这里还有其他 .htaccess 文件吗?就像在您的任何子目录中一样 /admin/ ?

    还可以尝试交换 htaccess 文件的最后两行,

    RewriteRule ^admin/$  admin.php [L]
    RewriteRule ^(.*)$   /members/$1/    [L,R=301]
    

    据我所知,Switch [L] 表示它是最后使用的规则。尝试删除它。

    【讨论】:

      猜你喜欢
      • 2012-06-04
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 2016-02-18
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 2011-05-16
      相关资源
      最近更新 更多