内部重定向上的RewriteRule匹配父文件夹

时间:2019-04-09 20:58:44

标签: regex .htaccess redirect

我正在尝试将所有单个博客页面URL重定向到PHP模板。

/ blog / blog-post-1会说到/ blog /的index.php的路由,但将URL保留为现有数据段以提取数据。

实际上只是用于Blog文件夹的基本路由器。

但是,父文件夹/ blog /似乎也已匹配。我只希望单人/儿童页面匹配。

我尝试了多个htaccess RewriteRules,并在正则表达式检查器站点和htaccess匹配器站点上对其进行了测试。

下面的内部代码重定向实际上似乎可以在那些站点上运行,但是在我的本地主机上,它也与父页面匹配。

RewriteRule ^blog/(.+)$ / [L,NC]

这也与父页面(/ blog /)相匹配,并且还返回到主页。

但是,如果我将其作为实际重定向执行

RewriteRule ^blog/(.+)$ / [R,L,NC]

它可以按预期运行,并且仅对儿童有效。唯一的问题是它将删除现有的URL。

我希望第一个重定向能够正常工作,并且只重定向子页面,但实际上它匹配所有内容。

添加R标志并将其设置为实际重定向似乎可行。

不确定我是否缺少什么?

1 个答案:

答案 0 :(得分:0)

打开mod_rewrite日志后,我发现apache2正在循环浏览该路径的可能网址。

因此它将检查:

博客/ blog / index.html blog / index.php

最后一个是与htaccess规则匹配的实际路径。

我将规则更新为:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^blog/(.+)$ / [L,NC]

要确保所请求的URL既不是文件也不是目录。

似乎可以完成这项工作。我确定还有其他Cond规则可能会有所帮助。