mod_rewrite重定向浏览器而不是重写

时间:2011-10-06 07:12:31

标签: apache .htaccess mod-rewrite url-rewriting url-redirection

我使用以下mod_rewrite从我的网站的顶级目录重定向到子目录shows/

Options +FollowSymlinks
RewriteEngine On
RewriteRule ^$ shows [L]

重定向表现良好。但是,URL是显示重定向,我相信如果你使用mod_rewrite它不应该。

澄清:指向http://www.example.com/的浏览器会重定向到子目录shows/。但浏览器会在网址中将重定向显示为http://www.example.com/shows/。同样,我的理解是,通过使用mod-rewrite,您可以使重定向不可见,因此用户不会意识到重定向已经发生。

我做错了吗?

2 个答案:

答案 0 :(得分:6)

我现在看到了问题。您正在重写从http://www.example.com/http://www.example.com/shows的网址。由于/shows是目录而不是文件,因此Apache在重写后会发送尾部斜杠重定向。以下是如何修复它:

RewriteRule ^$ shows/ [L]
# here -------------^

注意:由于Apache可能早先发送了 301 Moved Permanently 标头,因此浏览器会缓存此响应,即使您对.htaccess文件进行了更改,它也可能显示错误的页面/内容。在测试时经常清除浏览器缓存。

答案 1 :(得分:0)

我很久以前就想知道这一点,所以我决定在google上搜索,然后我找到了你的问题。我意识到有两个选项" Redirect"和#34;重新映射"。所以我认为这是理解你所要求的关键。基本上,有两个选项

重定向而不更改网址

RewriteEngine on
RewriteRule ^/foo\.html$ /bar.html [PT]

&安培;和重定向更改浏览器上的URL。

RewriteEngine on
RewriteRule ^/foo\.html$ bar.html [R]

无论如何,看看这里 http://httpd.apache.org/docs/2.2/rewrite/remapping.html