将站点向上移动一个目录

时间:2014-06-20 05:04:40

标签: php .htaccess mod-rewrite

我已将我的网站移到一个目录中,并希望旧链接“转移”到新位置。

旧目录为/project/,该目录中的文件现在位于/

例如。我希望www.example.com/project/page.php链接到www.example.com/page.php并更改浏览器网址,以便用户知道网页已移动。

这是在/

中的.htaccess文件中
RewriteEngine On
RewriteRule ^/project/?(.*)$ /$1
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]

但这取决于www.example.com而不是www.example.com/page.php 我错了什么?

2 个答案:

答案 0 :(得分:0)

这应该有效。但我稍微调整了一下,以使其在我的本地测试环境中更好地工作:

RewriteEngine On
RewriteRule ^project/(.*)$ /$1 [L,R=301]

主要变化包括:

  • /删除初始^/project/(.*)$斜杠,现在为^project/(.*)$
  • 添加L(上一个)和R(重定向)标记 - 包括显式301重定向类型。

现在,如果我使用curl -I来查看返回的标头;在Mac OS X中使用MAMP,如下所示:

http://localhost:8888/project/page.php

返回的输出是:

HTTP/1.1 301 Moved Permanently
Date: Fri, 20 Jun 2014 05:09:14 GMT
Server: Apache/2.2.23 (Unix) mod_ssl/2.2.23 OpenSSL/0.9.8y DAV/2 PHP/5.4.10
Location: http://localhost:8888/page.php
Content-Type: text/html; charset=iso-8859-1

这意味着它可以正常转到http://localhost:8888/page.php

您的.htaccess中是否设置了其他规则?可能是他们正在干扰您上面显示的规则成功完成的过程。

编辑:根据提供的完整.htaccess,我建议您进行此修改:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301]
RewriteRule ^project/(.*)$ /$1 [L,R=301]

只需将project/检查作为最后一行。并且可能会删除L中的RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301],如下所示:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301]
RewriteRule ^project/(.*)$ /$1 [L,R=301]

或许这个:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^project/(.*)$ /$1 [L,R=301]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301]

答案 1 :(得分:0)

我认为您需要添加

,而不是更改所有规则
#it should be now
RewriteBase /

#if code files are in projects folder
RewriteBase /projects/ 

这样,无需在所有RewriteRule中附加文件夹名称。