高级301重定向到站点根目录的整个站点?

时间:2014-10-21 16:01:13

标签: .htaccess mod-rewrite redirect joomla

我正在努力解决一个古老的问题。我继承了一个网站,有一些相当不错的搜索引擎优化和一个明显的问题。整个站点托管在/ site /子目录中。我已经决定需要在根目录下加载站点。所以像http://example.org/site/index.php这样的东西将改为重定向到/index.php(< - 计为链接,如果不清楚我的意思是它是site / index.php的根。)

我们使用joomla作为后端,此时网站上有数百页。我一直在努力获得我所见过的任何重定向,以实现我希望他们做的事情。基本上,我们的顾客从其中带有 / site / 的旧链接访问的任何页面都应该重定向到完全相同的链接,但没有明星。

我愿意从/ site /加载页面并使其看起来像是从root开始。我的理解是,这可以通过一些改进mod-rewrite(http://kb.mediatemple.net/questions/85/Using+.htaccess+rewrite+rules#gs?)来完成,但我还没有取得任何成功。我运行了一个测试网站,模仿我已经从/ site /转移到/的子域中的父网站,所以我可以测试很多.htaccess配置。

感谢任何帮助......谢谢!

3 个答案:

答案 0 :(得分:2)

只是为了确保:您希望http://example.org/site/foo/bar/baz.php转到http://example.org/foo/bar/baz.php,即删除(通过重定向)/ site前缀(如果有),但不要触摸该网址不然吧?如果是,则取决于您使用的服务器:

  • 如果您的服务器是Apache,您可以在.htaccess中使用类似的内容:

    RedirectMatch 301 ^/site/(.*)$ http://example.com/$1    
    
  • 如果是nginx,请将其添加到您网站的server {...}会话文件中(通常在/etc/nginx/sites-enabled内进行符号链接):

    location ~ ^/site/(.*)$ { rewrite ^/site/(.*)$ /$1 permanent; }
    

Here is a good explanation关于如何在两个服务器中设置基于模式的重定向。

答案 1 :(得分:1)

这似乎是我将要采用的工作答案。基本上,这个需求放在你想要重定向的目录中,在我的例子中,是root / site /。


上的RewriteEngine

RewriteCond%{http_host}!^ www.beta.example.org $ [nc]

RewriteRule ^(。*)$ http://beta.example.org/ $ 1 [r = 301,nc,L]


我认为第一条规则忽略了www?我喜欢解决这个问题,但我不确定为什么它会被创造出来。这将重写访问该.htaccess文件(在您的子目录中)的任何URL,并引导您到没有子目录列表的相同URL。它并没有真正使用index.php重写工具,但这很好,因为它仍然到达正确的页面。

如果有人对Joomla有更好的选择,我会很高兴听到它。但是,我知道这就是我现在要用的东西,因为它给了我很好的结果。

答案 2 :(得分:0)

如果你的服务器是apache2,你可以在那里配置

<VirtualHost *:80>
ServerName sitio.com
ServerAlias www.sitio.com
DocumentRoot /home/user/public_html/sitio/
...
</VirtualHost>

您需要此更改的权限