开发者

301 redirect from mod_rewrite RewriteMap program

I'm using mod_rewrite's RewriteMap directive to process URLs. My RewriteMap program is a PHP script and everything is running fine. I'm开发者_开发技巧 able to map friendly URLs to PHP program + ID. Anyway, what I want to do is return a 301 redirect for certain URLs. For example, if someone puts in the URL:

http://www.example.com/directory1

Then I want my RewriteMap program to send a 301 redirect to

http://www.example.com/directory1/ (trailing slash)

Which will then go into my program again to be mapped onto a PHP script. I tried adding [R=301] at the end of my statement, but this just hangs the request. Here's the basic logic of my script:

if ($input_url == "/directory1") {
    echo "/directory1/ [R=301]\n";          // this doesn't work... just hangs
}
else if ($input_url == "/directory1/") {
    echo "/myprogram.php?id=1\n";
}

Any ideas?


The -d test in RewriteCond is designed specifically for your case Sridhar. It tests if there is a directory present in the filesystem. If true, AND if there is no trailing slash, then you could apply the redirect. That would be like this:

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

You wouldn't need a RewriteMap (prg) in this case.


That’s not possible the way you want to do it. But you could use an additional rule to redirect all requests of URLs without a trailing slash:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜