【发布时间】: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