我迷路了,我花了好几个小时研究这个简单的问题,无法弄清楚我在这里做错了什么。
这可以按预期工作:
RewriteEngine on
RewriteRule ^([A-Za-z0-9-_.]+)/([A-Za-z0-9-_.]+/)$ index.php?eins=$1&%{QUERY_STRING}&zwei=$2&%{QUERY_STRING} [L]
并重写此请求:https://domain.tld/asdf/asdf/ 内部 到https://domain.tld/index.php?eins=asdf&zwei=asdf 到目前为止一切都如预期的那么好。
但是如果我添加这个额外的第二条规则
RewriteEngine on
RewriteRule ^([A-Za-z0-9-_.]+)/([A-Za-z0-9-_.]+/)$ index.php?eins=$1&%{QUERY_STRING}&zwei=$2&%{QUERY_STRING} [L]
RewriteRule ^(.+[^/])$ /$1/ [R=301,L]
Apache使用301响应同一请求https://domain.tld/asdf/asdf/以重定向到https://domain.tld/index.php/?eins=asdf&&zwei=asdghi/
我预计第一个RewriteRule应该是L = Last,但为什么要重定向?实际上,如果缺少尾部斜杠,我想实现301重定向 。
答案 0 :(得分:0)
检查RewriteRule Flags L|last
,
如果您在.htaccess文件或中使用RewriteRule 部分,重要的是要有一些了解 如何处理规则。简化形式就是这一次 规则已经处理,重写的请求被交还给 URL解析引擎可以用它做它可能做的事情。它可能是 当处理重写的请求时,.htaccess文件或 可能会再次遇到该部分,因此可以运行规则集 从一开始。最常见的情况是,如果其中之一 规则导致重定向 - 内部或外部 - 导致 请求流程重新开始。
如果您只想为目录添加尾部斜杠,可以尝试以下规则:
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_URI} !(.+)/$
RewriteRule ^(.*) $1/ [L,R=301]