我不太确定为什么它不起作用,但是我不断收到404或500的消息。我正在尝试使用附加的查询字符串将子目录重定向到根目录。因此,如果我转到__kindof
,我将被重定向(显然是在幕后)到example.com/dir
。我尝试使用此方法,但似乎不起作用:
example.com/?url=dir
我以为域名之后的所有内容都可以不以查询字符串开头(以防止无限重定向循环),并将其附加到查询字符串上发送到首页。但这不起作用。我该怎么办?
答案 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
,因为无论大小写,您都可以捕获所有内容。
NS
(nosubrequest
)标志可防止在mod_dir发出目录索引的子请求时调用该规则。换句话说,它可以防止将example.com/
的请求在内部重写为index.php?page=index.php
。