我的链接格式为
www.mydomain.com/dir/this_my_page.html
我的新脚本需要转发到
www.mydomain.com/newdir/this+my+page.htm
我要在.htaccess文件中编辑什么才能实现这一目标?任何人都可以帮助我使用htaccess的 mod_rewrite 函数吗?
答案 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响应。