为 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?的主要内容,如果未能解决你的问题,请参考以下文章

Apache URL重写规则

在 Apache 2.4 中链接 URL 重写规则

thinkphp在iis下如何写规则url重写

apache中的vhost重写规则-摆脱子域而不重定向

Apache新的URL路由重写规则

如何在 .Htaccess 中禁用/不允许共享主机 RewriteLog 时,在 Apache 2 中模拟和测试 URL 重写规则?