Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用.htaccess重定向网页,以便将旧链接重定向到新链接?_.htaccess_Mod Rewrite_Redirect - Fatal编程技术网

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

如何使用.htaccess重定向网页,以便将旧链接重定向到新链接?,.htaccess,mod-rewrite,redirect,.htaccess,Mod Rewrite,Redirect,我有一个旧格式的链接 www.mydomain.com/dir/this_my_page.html 我的新剧本需要转发给 www.mydomain.com/newdir/this+my+page.htm 我将在.htaccess文件中编辑什么,以便实现这一点?有人能帮我修改htaccess的功能吗?我建议使用前端控制器。这意味着您可以使用htaccess文件将所有请求重写为单个文件(index.php),然后使用该文件中的代码发送到相应的页面。您可以从旧url重定向到新url,如果是

我有一个旧格式的链接

 www.mydomain.com/dir/this_my_page.html 
我的新剧本需要转发给

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

我将在.htaccess文件中编辑什么,以便实现这一点?有人能帮我修改htaccess的功能吗?

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

这比为您可能拥有的每种页面类型编写庞大的重写规则要容易得多。通过这种方式,所有的工作都是用你的网站已经运行的同一种语言完成的,因此你不必学习和维护一个可怕的巨大的.htaccess文件,不管怎么说,这都是一场噩梦

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

RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
然后在index.php中,您需要执行所有解释请求的逻辑,并确定如何处理请求。我个人喜欢使用Zend Framework MVC:


但是,如果您已经有了不同格式的URL,那么转换它可能需要做大量的工作。

如果您只是更改URL的一部分,例如目录,您可以使用

RedirectMatch ^/oldPath/(.*) http://www.example.com/newPath/$1
(可能适用于相对URL,未测试…)

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

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,但我将保留该选项;)

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

ErrorDocument 404 /redirect.php (or .jsp, .asp, .whatever)
然后使用该脚本查找原始请求url,并使用您最喜欢的脚本/编程语言将旧url转换为新url(检查请求标题以确定原始url的名称。在PHP中,将其放在错误文档中(不要忘记在生产版本中删除)并在请求中找到原始URL头。然后使用新URL发送响应