【问题标题】:htaccess rewrite is giving me 500 error?htaccess rewrite 给我 500 错误?
【发布时间】:2010-10-14 19:32:04
【问题描述】:

我有这个我想友好的 url,在 .htacess 上使用重写但它给了我一个错误(500 内部服务器错误),这是我的原始 php url

http://www.example.com/viewtopic.php?topic=lovetopic

我想改成这样:

http://www.example.com/lovetopic

这是我的整个 htaccess 代码是这样的:

RewriteEngine On
RewriteRule ^user/([^/]*)$ /viewprofile.php?user=$1 [L]
RewriteRule ^([^/]*)$ /viewtopic.php?topic=$1 [L]

不知道是什么问题

EDIT服务器错误日志给了我这个错误

[Thu Oct 14 20:34:36 2010] [error] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace., 

【问题讨论】:

  • 我把服务器错误日志给了我的东西,谢谢:))
  • 自从我对主题 url 进行了重写,它一直给我这 500 个内部错误

标签: php .htaccess url rewrite


【解决方案1】:

您的第二条规则^([^/]*)$ 的模式也匹配/viewtopic.php,没有路径前缀/,即viewtopic.php。这就是你有无限递归的原因。

您可以使用以下条件排除:

RewriteCond $1 !=viewtopic.php
RewriteRule ^([^/]*)$ /viewtopic.php?topic=$1 [L]

或使用此条件排除所有现有文件:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)$ /viewtopic.php?topic=$1 [L]

或者在其他规则之前使用这条规则来阻止每个可以映射到现有文件的请求被以下任何规则重写:

RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

【讨论】:

  • D'oh,我刚刚检查过...不,[L] 不会阻止内部重定向导致所有规则在新 url 上重新处理。
  • @R. Bemrose:不,[L 标志](httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriteflags) 有点不同:“但是请记住,如果 RewriteRule 生成内部重定向(在 per-目录上下文),这将重新注入请求并导致从第一个 RewriteRule 开始重复处理。”
  • 谢谢你这个工作,:)),问题是我有一个名为 home.php 的文件是主页,系统认为它是一个主题而不是主页? :)) 如果你知道我的意思,那么我应该使用什么规则大声笑:))
  • @getaway:您可能想使用他在现有规则之前发布的第三个示例。这将阻止您现在看到的内容(P.S. 删除了我的答案,因为它是错误的)
猜你喜欢
  • 2014-09-25
  • 2014-04-23
  • 1970-01-01
  • 2018-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-16
  • 2018-01-05
相关资源
最近更新 更多