我已将我的网站移到一个目录中,并希望旧链接“转移”到新位置。
旧目录为/project/
,该目录中的文件现在位于/
例如。我希望www.example.com/project/page.php
链接到www.example.com/page.php
并更改浏览器网址,以便用户知道网页已移动。
这是在/
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
我错了什么?
答案 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中附加文件夹名称。