我正在尝试在我的本地开发机器上实现新的ReWrite规则。我已经设置了13条规则,并且一切正常(即使是在撰写本文时)。但是,由于某种原因,最新的一个给我带来了500个内部服务器错误。
重写规则是:
RewriteRule stuff/public_html/vault/mystuff/view/(.*) /stuff/public_html/vault/mystuff/view/index.php?stuff=$1
RewriteRule stuff/public_html/vault/mystuff/view/(.*)/ /stuff/public_html/vault/mystuff/view/index.php?stuff=$1
检查了我的apache日志并得到了这个:
[Thu Jan 13 22:07:43 2011] [error] [client ::1] mod_rewrite: maximum number of internal redirects reached. Assuming configuration error. Use 'RewriteOptions MaxRedirects' to increase the limit if neccessary., referer: http://localhost:8888/stuff/public_html/vault/mystuff/all/index.php?curr=7
在脚本上我试图重定向到view / index.php?stuff = $ 1,没有任何东西甚至可以远程类似于任何类型的重定向。我确实在登陆脚本的顶部调用了一个非常非常基本的会话验证程序,如下所示:
//Start session
session_start();
//Check whether the session variable SESS_MEMBER_ID is present or not
if(!isset($_SESSION['SESS_MEMBER_ID']) || (trim($_SESSION['SESS_MEMBER_ID']) == '')) {
header("location: ".$root_http."");
exit();
}
但是,当我直接访问页面时,它会按原样运行,并且没有重定向。我的所有其他重写规则及其相应的登录页面设置方式完全相同。
这让我大吃一惊。任何帮助,请!?
根据Marc B的建议,我打开了RewriteLog,并想出了这个:
:: 1 - - [13 / Jan / 2011:23:00:09 - 0500] [localhost / sid#807df8] [摆脱#941b38 / initial / redir#10](2)[per-dir /用户/ stepheng /开发/]重写东西/ public_html / vault / mystuff / view / index.php - > /stuff/public_html/vault/mystuff/view/index.php?stuff=index.php
:: 1 - - [13 / Jan / 2011:23:00:09 - 0500] [localhost / sid#807df8] [摆脱#941b38 / initial / redir#10](3)split uri = / stuff /public_html/vault/mystuff/view/index.php?stuff=index.php - > uri = / stuff / public_html / vault / mystuff / view / index.php,args = stuff = index.php
:: 1 - - [13 / Jan / 2011:23:00:09 - 0500] [localhost / sid#807df8] [摆脱#941b38 / initial / redir#10](3)[per-dir /用户/ stepheng /开发/]将模式'stuff / public_html / vault / mystuff / view /(.*)/'应用到uri'/stuff/public_html/vault/mystuff/view/index.php'
:: 1 - - [13 / Jan / 2011:23:00:09 - 0500] [localhost / sid#807df8] [摆脱#941b38 / initial / redir#10](1)[per-dir /用户/ stepheng /开发/]内部重定向与/stuff/public_html/vault/mystuff/view/index.php [内部重定向]
看起来它正在尝试发送参数?stuff = index.php,但我不知道这是怎么回事。有什么想法吗?
答案 0 :(得分:5)
启用重写日志记录:
RewriteLog /path/to/rewritelog.file
RewriteLogLevel 9
在你的httpd.conf中。这基本上记录了重写引擎所做的一切,你将能够看到URL通过系统的确切路径,并且很可能是为什么它正在做看起来无限循环
答案 1 :(得分:2)
那个重写规则不匹配它的目的地吗?它会循环。您需要添加标记,表示最后停止处理重写规则:
RewriteRule stuff/public_html/vault/mystuff/view/(.*)/ /stuff/public_html/vault/mystuff/view/index.php?stuff=$1 [L]
答案 2 :(得分:0)
我不确定请求中包含此路径的请求:/stuff/public_html/vault/mystuff/view
- 您的文档根目录指向哪里?
你能发布完整的apache吗?
同时,尝试这一点 - 如果系统与现有文件或目录匹配,它会停止重定向,因此您只应重定向一次:
RewriteEngine on
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !-d
RewriteRule stuff/public_html/vault/mystuff/view/(.*)/ /stuff/public_html/vault/mystuff/view/index.php?stuff=$1 [QSA,L]