Apache .htaccess预编附加'/';当重定向到www*

Apache .htaccess预编附加'/';当重定向到www*,apache,.htaccess,mod-rewrite,Apache,.htaccess,Mod Rewrite,我正在使用这个片段: RewriteEngine on RewriteCond %{HTTP_HOST} !^www\. RewriteRule ^(.*)$ http://www.%{HTTP_HOST}$1 [R=301,L] 将非www请求重定向到www.domain.tld。重定向没有问题,除非当我访问域(如domain.tld时,我被重定向到www.domain.tld/(注意第二个斜线)。只有当查询字符串为空时才会发生这种情况,如果我向其中添加/test/123,我会得到一个完美

我正在使用这个片段:

RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}$1 [R=301,L] 
将非www请求重定向到www.domain.tld。重定向没有问题,除非当我访问域(如domain.tld时,我被重定向到www.domain.tld/(注意第二个斜线)。只有当查询字符串为空时才会发生这种情况,如果我向其中添加/test/123,我会得到一个完美的重定向:www.domain.tld/test/123/,正如预期的那样

可能的原因是什么?我如何解决
这种奇怪行为的原因是什么


PS如果您想查看完整的VHost配置,请告诉我:)

我认为这可能是指令
DirectorySlash
在这里干扰–您请求domain.tld,它引用根目录,但缺少斜杠,因此mod_dir会采取行动…但不建议停用此指令,这将导致许多其他问题。你可以先用RewriteCond检查请求的URI来修复这个问题,如果目标不是空的或者其他什么的话,只在目标后面加$1(顺便说一句,你所说的查询字符串是URL的路径组件,查询字符串是之后的参数,
?foo=bar
)是的,我将使用用户友好的URL,比如
www.domain.tld/article/Hello World
或类似的东西。由于我将使用动态子域,所以www.是至关重要的,我需要确保应用程序代码中不会出现错误。请给我一个如何检查路径组件是否为空的示例。我不太熟悉mod_rewrite:)