如果表达式不匹配,我可以在重写规则中提供默认值吗?

如果表达式不匹配,我可以在重写规则中提供默认值吗?

我甚至不确定我是否以正确的方式解决这个问题,所以我将在这里提出整个问题。

我有一个网站,其 URL 如下:

www.example.com/some-random-key/page.php

我正在像这样重定向:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*?)/(.*?)$ $2?key=$1

并且这基本上是有效的。我的问题是以下两个 URL 最终不等同:

www.example.com/my-key
www.example.com/my-key/

第二个示例的行为符合预期,重定向到根级别的 index.php,并传递“my-key”作为参数。

第一个例子因未找到错误而失败。

有没有办法添加一条规则来说明if the file isnt found, then fetch index.php?key=$key或者我是否从错误的角度来处理这个问题?

答案1

您的问题基本上是正则表达式。您尝试匹配后跟斜杠的任何内容,以及后跟任何内容的任何内容。

你应该试试:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/(.*)$ $2?key=$1 [R,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^.*/$
RewriteRule ^(.*)$ ?key=$1 [R,L]

第一个块是您的配置,可以按照您的需要工作。第二个块仅在没有尾部斜杠的情况下才适用,这正是您想要的。

唯一的缺点是如果有人请求一个在键后没有其对应的 page.php 的 URL(比如说 /some-key/nonexistant.php),它将被重定向到 ?key=nonexistant.php(不知道如何调用这个,功能还是错误 :P)。

请求的默认页面/?key=your-key是你DefaultIndex

相关内容