【问题标题】:RewriteRule not rewriting with matching regexRewriteRule 不使用匹配的正则表达式重写
【发布时间】:2014-01-04 02:13:09
【问题描述】:

我正在尝试让 apache 将对 mysite.com/blog/<number> 的请求重写为文件 /blog.php?page=<number>。但是,使用与该路径匹配的正则表达式,不会重写 URL,而是返回 404,因为 /blog/ 是不存在的目录。

这是我正在使用的RewriteRule

RewriteEngine On
RewriteRule ^blog/[0-9]+/? /blog.php?page=$1 [L]

我好久没用apache了,所以可能忘记了一些非常简单的必填项,但我看不出规则有什么问题。

编辑:

httpd.conf重写规则:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*)  https://%{HTTP_HOST}%{REQUEST_URI} [L]

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite apache2


    【解决方案1】:

    您没有使用圆括号对^blog/ 之后的数字进行分组,这就是$1 将为空的原因。

    在您的 DOCUMENT_ROOT/.htaccess 文件中尝试此规则:

    RewriteEngine On
    RewriteRule ^blog/([0-9]+)/?$ /blog.php?page=$1 [L,NC,QSA]
    

    【讨论】:

    • 不幸的是,这似乎没有奏效。尝试访问博客 URL 时,我仍然收到 The requested URL /blog/54 was not found on this server.
    • 好的,回到基础。您确定 .htaccess 和 mod_rewrite 已启用并正常工作吗?
    • mod_rewrite 肯定是(使用它来重定向 HTTP->HTTPS)。我不确定 .htaccess,但将规则添加到 httpd.conf(尝试 ^blog/...^/blog/...)不起作用。
    • 哦,如果您的 .htaccess 中已经有一些规则,那么请在您的问题中发布完整的 .htaccess。
    • .htaccess 除此规则外为空。
    猜你喜欢
    • 2023-04-03
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    相关资源
    最近更新 更多