1

我正在使用 mod_rewrite 的 RewriteMap 指令来处理 URL。我的 RewriteMap 程序是一个 PHP 脚本,一切运行良好。我能够将友好的 URL 映射到 PHP 程序 + ID。无论如何,我想做的是为某些 URL 返回一个 301 重定向。例如,如果有人输入 URL:

http://www.example.com/directory1

然后我希望我的 RewriteMap 程序发送一个 301 重定向到

http://www.example.com/directory1/ (尾部斜线)

然后它将再次进入我的程序以映射到 PHP 脚本。我尝试在我的语句末尾添加 [R=301] ,但这只是挂起请求。这是我的脚本的基本逻辑:

if ($input_url == "/directory1") {
    echo "/directory1/ [R=301]\n"; // 这不起作用...只是挂起
}
否则 if ($input_url == "/directory1/") {
    echo "/myprogram.php?id=1\n";
}

有任何想法吗?

4

2 回答 2

1

RewriteCond 中的 -d 测试专为您的案例 Sridhar 设计。它测试文件系统中是否存在目录。如果为真,并且如果没有尾部斜杠,那么您可以应用重定向。那将是这样的:

RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .*[^/]$ %{REQUEST_URI}/ [L,R=301]

在这种情况下,您不需要 RewriteMap (prg)。

于 2009-12-18T21:38:42.820 回答
0

这不可能按照您想要的方式进行。但是您可以使用附加规则来重定向 URL 的所有请求,而无需尾部斜杠:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .*[^/]$ %{REQUEST_URI}/ [L,R=301]
于 2009-12-10T06:55:39.263 回答