htaccess - mod_rewrite "same"规则必须同时适用于两者



我在制作标题时遇到了麻烦。因此,如果您有更好的内容,请对其进行编辑。

现在来问问题:

我正在尝试在我的 .htaccess 文件中用mod_rewrite重写一些 URL。

所以,我要做的是进行 2 个相同的查询,这当然是行不通的。仅适用于其中一条规则。所以我在想,是否有办法告诉如果第一条规则失败了,就会进入下一条规则?或者 - 如果一个规则失败,请继续寻找另一个规则?

这些是我的规则,除了最后一个参数外,它们是相同的。

RewriteRule ^udforsk/([a-z-]+)/([0-9]+)$ index.php?page=udforsk&q=1&s=$1&val=$2
RewriteRule ^udforsk/([a-z-]+)/([0-9]+)$ index.php?page=udforsk&q=1&s=$1&p=$2

如果我错了,请纠正我,但是,如果您通过 GET 传递参数,那么 index.php 应该处理如果缺少 GET 变量时会发生的错误。

在 index.php 中,像对待$_GET["val"]一样对待$_GET["p"],实际上,为什么不使用 isset() 并将p设置为等于 val(如果尚未设置p

重写不会检查您在规则中调用的页面是否确实有效。它只会尝试提供它,然后因为你没有 [L],它也会尝试提供下一个。

您可能应该做的是更改您的第一个 URL,以将 $2 值作为两个不同的参数传递

RewriteRule ^udforsk/([a-z-]+)/([0-9]+)$ index.php?page=udforsk&q=1&s=$1&val=$2
RewriteRule ^udforsk/([a-z-]+)/([0-9]+)$ index.php?page=udforsk&q=1&s=$1&p=$2

应该是

RewriteRule ^udforsk/([a-z-]+)/([0-9]+)$ index.php?page=udforsk&q=1&s=$1&val=$2&p=$2

然后让你的索引.php根据 php 脚本中的逻辑选择使用"val"或"p"的参数。

当然,在您的 php 代码中使用"isset"来测试变量。

$value = (isset($_REQUEST["val"]) ? $_REQUEST["val"] : (isset($_REQUEST["p"]) ? $_REQUEST["p"] : "error"));

$value将保存"val"或"p"的内容,或者"错误"一词(如果其他两个都没有设置)。