如何同时重写和重定向

时间:2013-04-27 17:02:52

标签: apache mod-rewrite redirect url-rewriting

假设有一个example.com(处理apache),我们有一个名为" sub"(example.com/sub)的子目录。技术上是否可以配置.htacess将http://example.com/sub/重写为http://example.com/home/并将所有流量重定向到它,以便/ home中的任何路径都应该重定向到/ sub中的相同路径,我试过了这个

RewriteEngine On
Options +FollowSymlinks
RewriteRule ^sub/?$ /home/ [R,NC]
Redirect /index.html http://example.com/sub

但最终我得到404 Not Found。有任何想法吗 ?

P.S。即使我收到1个答案,我之前的问题也已关闭:

RewriteRule /sub/$ /home/$1 [NC,L,R=301]
RewriteRule /index.html http://example.com/sub [R]

哪个对我不起作用(401禁止)。

1 个答案:

答案 0 :(得分:1)

要静默地将访问者对/home/anypath/anyfile的请求重写为/sub/anypath/anyfile服务器上的基础路径,您可以使用以下内容:

RewriteRule ^home(?:/(.+))?$ /sub/$1

要将用户的浏览器从//index.html重定向到干净的/home网址,您可以尝试以下操作:

RewriteRule ^(?:$|index.html$) /home [R=permanent]

(对于这两个规则,如果您使用的是httpd.conf,则需要在^符号后添加正斜杠。如果您使用的是.htaccess,那么您不需要在模式的开头斜线。)

请注意,您无法(轻松)从/sub重定向到/home,因为这会创建无限循环的重定向和重写。但是不要担心从/sub重定向到/home,因为干净的网址是关于使网址在广告文献和重新启动的网页上看起来很好。如果访问者碰巧访问旧的“丑陋”网址,则不会受到影响,只要他们点击任何新链接,他们就会被带到新的干净网址。