【问题标题】:.htaccesss similar rewrite rules.htaccess 类似的重写规则
【发布时间】:2021-12-22 16:26:39
【问题描述】:

我认为一个会覆盖另一个,我不太熟悉.htaccess 规则中的条件

这是当前的:

RewriteEngine on

RewriteRule ^$ /index.php [L]
RewriteRule ^([^/]*)$ /article.php?slug=$1 [L]
RewriteRule ^([^/]*)$ /cat.php?id=$1 [L]

如果我按原样使用,则 cat RewriteRule 将不起作用,如果我指定路径 ^cat/([^/]*)$ 它将起作用,所以我假设文章 RewriteRule 覆盖了后者。我怎样才能使这两个规则共存?任何帮助将不胜感激。

【问题讨论】:

  • "如果我指定路径 ^cat/([^/]*)$ 它会" - 那你为什么不保留它呢?您要匹配哪些 URL?对/foo 的请求会发生什么?
  • 您好,感谢您的评论。就是这样,当请求 /foo 时,它将获取我正在使用的文章 slug ID,我希望能够对 cat id fetch 使用相同的规则,抱歉,如果我使用了不相关的术语
  • “我希望能够对 cat id fetch 使用相同的规则” - 但是你如何区分应该发送到 article.php 的 URL 和应该发送到 @987654328 的 URL @?为什么要将/foo 发送到article 而不是cat/bar 呢?
  • 因为他们不会共享相同的 ID/Slug ?
  • 那么,它们的区别是什么?您如何确定应该将一个 URL 发送到 article.php,而将另一个 URL 发送到 cat.php

标签: apache .htaccess mod-rewrite


【解决方案1】:

我想这就是你要找的东西:

RewriteEngine on
RewriteRule ^/?$ /index.php [L]
RewriteRule ^/?article/([^/]*)$ /article.php?slug=$1 [L]
RewriteRule ^/?cat/([^/]*)$ /cat.php?id=$1 [L]

关键是您的匹配模式需要以某种方式有所不同,因为引擎必须有一些方面来决定何时应用什么规则。

【讨论】:

  • 朋友您好,感谢您的回复。我想要完成的是使用主路径目录作为文章 ID 和猫 ID 的标识符,我相信它会相互抵消。还有其他方法可以用来完成我的要求吗?
  • 您显然不能使用相同的 URL 来定位两个不同的资源。 http服务器应该如何区分这两者呢?如果您可以回答,则可以实施规则。但到目前为止,您还没有回答这个问题。
  • 就像上面回答的那样,他们显然不会共享相同的 ID/URL
  • 抱歉,我在上面没有发现任何此类差异。你能解释一下吗?在您之前的评论中,您写道“使用主路径目录作为标识符”。对我来说,这听起来像是您想使用“主文件夹”的路径,因此路径“/”作为 both 资源的 URL。如果那不是你试图表达的,那么请给出你真正在说什么的准确和清晰的例子。应该将哪个 URL 重写为哪个内部资源?我的回答可能是错误的。但那是因为我必须猜测你在寻找什么。
猜你喜欢
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多