重定向子目录到查询字符串

时间:2019-01-24 19:13:23

标签: .htaccess redirect

我不太确定为什么它不起作用,但是我不断收到404或500的消息。我正在尝试使用附加的查询字符串将子目录重定向到根目录。因此,如果我转到__kindof,我将被重定向(显然是在幕后)到example.com/dir。我尝试使用此方法,但似乎不起作用:

example.com/?url=dir

我以为域名之后的所有内容都可以不以查询字符串开头(以防止无限重定向循环),并将其附加到查询字符串上发送到首页。但这不起作用。我该怎么办?

1 个答案:

答案 0 :(得分:1)

RewriteRule [^?](.+) ?page=$1 [L,QSA,NC]

RewriteRule 模式仅与URL路径匹配。它从不包含查询字符串(可在单独的服务器变量QUERY_STRING中使用)。

您还应该将其重写为正在处理请求的实际文件。如果您只是简单地重写为?page=$1,那么您将依靠mod_dir对索引文档进行附加的子请求。如果索引文档为index.php,则直接将其重写,即。 index.php?page=$1

以上看起来将导致重写循环。

请尝试以下操作:

RewriteCond %{QUERY_STRING} !^page=
RewriteRule (.+) index.php?page=$1 [NS,L,QSA]

前面的条件检查查询字符串是否不以“ page =”开头。

这里不需要NC,因为无论大小写,您都可以捕获所有内容。

NSnosubrequest)标志可防止在mod_dir发出目录索引的子请求时调用该规则。换句话说,它可以防止将example.com/的请求在内部重写为index.php?page=index.php