2011-10-06 68 views
3

我使用下面的mod_rewrite从我的网站的顶级目录重定向到子目录shows/mod_rewrite并重定向浏览器,而不是改写

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

重定向正在执行的罚款。但是,URL是显示的重定向,我相信它不应该使用mod_rewrite。

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

我做错了什么?

回答

5

我现在看到了这个问题。您正在将网址从http://www.example.com/改写为http://www.example.com/shows。由于/shows是目录而不是文件,Apache在重写后发送尾部斜杠重定向。这里是你如何解决这个问题:

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

注:因为Apache可能已经发出了301永久头前面感动,浏览器会缓存此响应,它可能告诉你错误的页面/内容即使您更改你的.htaccess文件。经常在测试时清除浏览器缓存。

+0

Naaay说没有。它完全改变了被认为是根文件夹的内容。页面上的所有链接文件都没有链接。感谢您的尝试。 – stefmikhail

+0

它在我的系统上按预期工作:'localhost /'显示来自'localhost/shows /'的内容,没有301重定向或地址栏中的地址改变。至于断开的链接:你应该期待他们并找到解决办法。 –

+0

我没有构建网站,并且所有内容都相对于根目录进行了链接,因此,如果更改所考虑的根目录,则需要做更多工作来解决此问题。我可以看到重定向到的目录。 – stefmikhail

0

很久以前我很想知道,所以我决定搜索谷歌,我发现你的问题。我意识到,有两个选项“重定向”和“重映射”。所以我认为这是了解你所问的关键。基本上有两种选择

重定向而不更改URL

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