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站点配置,看看是否有任何其他规则干扰此规则集。