apache mod 重写过多重定向

apache mod 重写过多重定向

我正在尝试将我的默认语言 (nl) 的所有请求重定向到 /nl.....(不向用户显示重定向)。因此 example.com 应该重定向到 example.com/nl,而不会在浏览器中明显更改 URL。以下是我尝试的方法:

    RewriteEngine On
    RewriteCond %{REQUEST_URI} !^/en.*
    RewriteCond %{REQUEST_URI} !^/nl.*
    RewriteRule ^(.*)$  nl$1 [R,L]

重定向对用户可见(/nl/index.php),此外还会导致“重定向过多”。

如果我尝试 [P,L],我会得到:没有权限访问此服务器上的“\”。

实现我想要的正确方法是什么?

答案1

RewriteRule 后面不应该有,[R]因为这会告诉 Apache 发送 302 重定向而不是内部重写 URL。

RewriteRule 的第二部分应以斜线开头,除非是在目录上下文中(例如在文件.htaccess<Directory >块中)。如果没有斜线,则会将 URL 重写为类似 的内容,http://example.comnl/index.php而不是http://example.com/nl/index.php

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/en.*
RewriteCond %{REQUEST_URI} !^/nl.*
RewriteRule ^(.*)$  /nl$1 [L]

相关内容