.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 将另一个规则覆盖到其他页面的主要内容,如果未能解决你的问题,请参考以下文章
htaccess 规则将 /login/ 和 /login 转发到同一页面?