如何使用.htaccess重定向我的网页,以便将旧链接重定向到新链接?

时间:2009-03-06 02:07:51

标签: .htaccess mod-rewrite redirect

我的链接格式为

 www.mydomain.com/dir/this_my_page.html 

我的新脚本需要转发到

 www.mydomain.com/newdir/this+my+page.htm 

我要在.htaccess文件中编辑什么才能实现这一目标?任何人都可以帮助我使用htaccess的 mod_rewrite 函数吗?

2 个答案:

答案 0 :(得分:2)

我建议使用Front控制器。这意味着您使用htaccess文件将所有请求重写为单个文件(index.php),然后使用该文件中的代码分派到相应的页面。您可以从旧网址重定向到新网址,如果是新网址,则会调度到相应的网页控制器。

这比为您可能拥有的每种类型的页面编写大量重写规则要容易得多。这种方式所有的工作都是用你网站运行的同一种语言完成的,所以你不必学习和维护一个可怕的巨大的.htaccess文件,无论如何这都是一个噩梦!

以下是.htaccess文件的示例,该文件将所有非静态请求重定向到index.php:

RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php

然后在index.php中,您需要完成解释请求的所有逻辑并弄清楚如何处理它。我个人喜欢使用Zend Framework MVC: http://framework.zend.com/manual/en/zend.controller.html

但如果您已经以不同的格式使用它,那么转换为可能需要做很多工作。

答案 1 :(得分:1)

如果您只是更改网址的部分内容,例如目录,你可以使用

RedirectMatch ^/oldPath/(.*) http://www.example.com/newPath/$1

(可能适用于相对网址,未经过测试......)

如果文档名称也发生了变化,您必须找出要翻译的算法,或者为要重定向的每个网址设置一个重定向。根据文件的数量,你可以做非魔法和完全不酷的

RedirectMatch ^/dir/first_document.html /newdir/first+document.html
RedirectMatch ^/dir/second_document.html /newdir/second+document.html
RedirectMatch ^/dir/third_document.html /newdir/third+document.html

某些Regexp向导可能会为所有数量的下划线添加regexp,以便转换为plusses,但 I 将会保持打开状态;)

如果这太多了,你实际上不需要重写,你也可以选择404错误文档,例如

ErrorDocument 404 /redirect.php (or .jsp, .asp, .whatever)

然后使用该脚本查找原始请求URL并使用您喜欢的脚本/编程语言将旧URL转换为新URL(检查请求标头以确定原始URL的名称。在PHP中放置错误文档(不要忘记在生产版本中删除它)并在请求中找到原始URL标头。然后使用新URL发送301 Moved Permanently响应。