.htaccess 将另一个规则覆盖到其他页面

Posted

技术标签:

【中文标题】.htaccess 将另一个规则覆盖到其他页面【英文标题】:.htaccess overwrite another rule to other page 【发布时间】:2016-03-09 03:09:46 【问题描述】:

我的 .htaccess 文件中有以下重写规则:

RewriteRule ^page_edit_(.*) page_edit.php?page=$1
RewriteRule ^page page.php

例如,如果我转到 /page_edit_12,我会看到 page.php 的内容。但我想查看 page_edit.php?page=12。

通过以下规则,它给出了正确的参数。所以如果我按照这个规则去 /page_edit_12,我会看到 page.php?edit=true&page=12

的内容
RewriteRule ^page_edit_(.*) page.php?edit=true&page=$1
RewriteRule ^page page.php

为什么我不能破坏 URL 以便它可以访问另一个文件,如果找到与另一个 URl 的匹配项也是如此(/page_edit_12 中的/page)?

【问题讨论】:

您是否查看过 RewriteRule 标志,例如 [L] 如果匹配则不会继续执行进一步的规则? 【参考方案1】:

您应该将 [L] - Last - Flag 添加到您的第一行,这样它将在 .htacces 中结束该过程:

RewriteRule ^page_edit_(.*) page_edit.php?page=$1 [L]

【讨论】:

好吧,L 在第二轮规则处理中会失败。【参考方案2】:

您的第二条规则的正则表达式模式匹配“/page_edit.php”并将其重写为 /page.php,在模式末尾添加 $ 以将其限制为仅匹配 /page。

RewriteRule ^page_edit_(.*) page_edit.php?page=$1 [NC,L]
  RewriteRule ^page/?$ page.php [L]

【讨论】:

感谢您的回答。这是我的问题的解决方案。

以上是关于.htaccess 将另一个规则覆盖到其他页面的主要内容,如果未能解决你的问题,请参考以下文章

PHP .htaccess重定向

htaccess 规则将 /login/ 和 /login 转发到同一页面?

.htaccess中带?参数的重定向伪静态写法

.htaccess 规则将图像文件的直接视图重定向到页面,图像作为查询字符串传递

将Apache的.htaccess转换到nginx中

.htaccess 规则在用户使用站点时使站点脱机