为 Apache 重写规则没有找到 URL?
Posted
技术标签:
【中文标题】为 Apache 重写规则没有找到 URL?【英文标题】:Rewrite rule for Apache not finding URL? 【发布时间】:2012-02-26 09:50:43 【问题描述】:当我将此条目添加到我的 .htaccess 文件时,使用我在 previous post 中从 rcs20 收到的答案,我看到错误 404 Not Found:
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^member\-([0-9]+)\-([^/])\.htm(l)?$ view_profile.php?id=$1 [NC,L]
我传递的网址是:
mysite/member-8222-jane.html
知道为什么会发生这种情况。我的旧重写规则工作正常:
RewriteRule view_profile=(.*)$ view_profile.php?id=$1
【问题讨论】:
检查您的 Apache 错误日志,看看它吐出什么。 看起来像:RewriteRule: unknown flag 'NC] 是拼写错误还是您实际上有两个右方括号[L,NC]]
,这也可能导致 500。应该只是[L,NC]
我刚刚看到并删除了修复错误的第二个括号,但它仍然不想重写我传递的 URL
我继续收到 404 错误。如果我将第二个正则表达式更改为 (.*)\.htm(l)?$ 它可以工作,但这有效吗?
【参考方案1】:
找到了:
+
符号需要添加到[^/]
=> ([^/]+)
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^member\-([0-9]+)\-([^/]+)\.htm(l)?$ view_profile.php?id=$1 [NC,L]
您还可以使用 $2 之类的 $2 在 member-8222-jaane.html
中添加额外的字符 jane
:
RewriteRule ^member\-([0-9]+)\-([^/]+)\.htm(l)?$ view_profile.php?id=$1&extra=$2 [NC,L]
【讨论】:
仍然失败,但如果我将其更改为: (.*)\.htm(l)?$ 它可以工作。有什么问题吗?以上是关于为 Apache 重写规则没有找到 URL?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 .Htaccess 中禁用/不允许共享主机 RewriteLog 时,在 Apache 2 中模拟和测试 URL 重写规则?