在翻译相同的URL时,在Apache中移动页面

时间:2013-01-20 14:32:31

标签: php apache url cakephp mod-rewrite

我想重新安排我的网站,并将所有客户页面移动到一个目录(/ customerPages)中,同时保持相同的URL(访问页面的URL和浏览器中显示的URL)。我正在使用ApachePHPCakePHP)。

我尝试按以下方式重新布线 404错误页面:

// Redirect customers to customers landing pages under /customerPages
if (strpos($message,'customerPages') == false) {
    $url = 'http://'.$_SERVER['HTTP_HOST'].'/customerPages'.$message;
    $homepage = file_get_contents($url);
    echo $homepage;
}

但是这个解决方案会破坏使用相对路径写入的所有图像。

后来我尝试使用重定向:

if (strpos($message,'customerPages') == false) {
    $url = 'http://'.$_SERVER['HTTP_HOST'].'/customerPages'.$message;
    header("Location: ".$url);
}

但是比URL更改了。我试图摆弄RewriteRule而没有运气。

如何使用第一种,第二种或任何其他方法实现这一目标?

2 个答案:

答案 0 :(得分:1)

您需要将图像请求从较新的位置(/ customerPages)重定向到旧路径。 您可以使用mod_rewrite apache模块重定向此类请求:

RewriteEngine on
RewriteRule ^/customerPages/(.*\.jpg|.*\.gif|.*\.png) /oldpath/$1 [R]

答案 1 :(得分:1)

另一种方式,只是基本的想法: 1.输入 /oldpath/.htaccess 文件(我们处理文件未找到404错误):

ErrorDocument 404 /oldpath/redirect.php

2。 /oldpath/redirect.php 文件(我们的处理程序) - 仅当文件存在于较新的位置时才重定向到新路径:

$url = parse_url($_SERVER['REQUEST_URI']);
$filename = basename($url['path']);

if(file_exists('/newpath/'.$filename)) {
  header('Location: /newpath/'.$filename);
}else{
  header('Location: /your_real_404_handler');
}