复杂的 htaccess 重写规则 - 我从哪里开始?

Posted

技术标签:

【中文标题】复杂的 htaccess 重写规则 - 我从哪里开始?【英文标题】:Complex htaccess rewrite rules - where do i start? 【发布时间】:2010-12-07 09:11:56 【问题描述】:

我之前在这里问过关于 mod_rewrite 的问题并得到了完美的答案,但现在我需要做一些更复杂的事情,并且真的需要更了解 mod_rewrite 的人的建议。

到目前为止,我的重写规则如下所示:

RewriteRule ([a-zA-Z_-]+)/([0-9]?) index.php?cat=$1&page=$2

这显示 URL 如下:/categoryname 并显示类似/categoryname/1/ 的页面。

但我真的很想修改规则以使用子类别,例如 /categoryname/subcategoryname/,并且仍然使用页面系统 (subcat/2/),但我似乎无法解决这个问题。

如果您在主类别等上,则需要忽略子猫重写。

希望有人可以帮助我。

【问题讨论】:

【参考方案1】:
RewriteRule [a-zA-Z_-]+/([a-zA-Z_-]+)/([0-9]?) index.php?cat=$1&page=$2 [L]
RewriteRule ([a-zA-Z_-]+)/([0-9]?) index.php?cat=$1&page=$2 [L]

【讨论】:

这很好,但我真的不想使用 cat 和 subcat 变量,是否可以将 subcat 名称提供给 cat 变量但如果不存在 subcat 则使用第一个 cat ? 只是好奇如果我想要第三只猫,我会在末尾添加 /([a-zA-Z_-]+)/([0-9]?) 吗? 好吧,更像是在前面添加另一个[a-zA-Z_-]+/。无论如何,相同的模式。 嗨,为了澄清我会在语句的开头添加第三个(就在规则之后)还是更进一步,因为我似乎无法让它工作...... 对。应该是RewriteRule [a-zA-Z_-]+/[a-zA-Z_-]+/([a-zA-Z_-]+)/([0-9]?) index.php?cat=$1&page=$2 [L]【参考方案2】:

我会使用这些规则:

RewriteRule ^([a-zA-Z_-]+)/([a-zA-Z_-]+)/(([1-9][0-9]*)/)?$ index.php?cat=$1&subcat=$2page=$4
RewriteRule ^([a-zA-Z_-]+)/(([1-9][0-9]*)/)?$ index.php?cat=$1&page=$3

对于开头 (^) 和字符串结尾 ($) 的断言,意外应用其中一个规则是没有歧义的。 (([1-9][0-9]*)/)? 部分用于可选分页。

【讨论】:

以上是关于复杂的 htaccess 重写规则 - 我从哪里开始?的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess 重写规则破坏 css

htaccess 子域重写规则

PHP/Apache:用 .htaccess 重写规则

Laravel .htaccess 重写规则转换为 IIS

htaccess 列出目录并为其重写规则

htaccess 重写规则 404 错误