Php 将站点向上移动一个目录

Php 将站点向上移动一个目录,php,.htaccess,mod-rewrite,Php,.htaccess,Mod Rewrite,我已将我的网站向上移动了一个目录,并希望旧链接“转移”到新位置 旧目录是/project/,该目录中的文件现在位于/ 比如说。我希望www.example.com/project/page.php链接到www.example.com/page.php,并更改浏览器url,以便用户知道页面已移动 这在我的.htaccess文件中/ RewriteEngine On RewriteRule ^/project/?(.*)$ /$1 RewriteCond %{HTTP_HOST} ^example.

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

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

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

这在我的.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

我做错了什么?

这应该行得通。但我对其进行了轻微调整,使其在本地测试环境中工作得更好:

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
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301]
RewriteRule ^project/(.*)$ /$1 [L,R=301]
返回的输出如下所示:

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]
只需将
项目/
复选框作为最后一行。并可能从
RewriteRule^(.*)中删除
L
http://www.example.com/$1[L,R=301]
如下:

http://localhost:8888/project/page.php
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]

我认为你需要增加一些规则,而不是改变所有规则

#it should be now
RewriteBase /

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

这样,无需在所有重写规则中附加文件夹名称。

@rosscosack立即检查。我相信改变规则的顺序应该会澄清这一点。我按照你的建议尝试了新版本。我现在获得的请求URL/home/user/public_html/example.com/page.php在此服务器上找不到。此外,尝试使用ErrorDocument处理请求时遇到404 Not Found错误。很抱歉,这应该可以工作。我会检查您的主要Apache站点配置,看看是否有任何其他规则干扰此规则集。