0

我想重新排列我的网站,并将所有客户页面移动到一个目录 (/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没有运气。

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

4

2 回答 2

1

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

RewriteEngine on
RewriteRule ^/customerPages/(.*\.jpg|.*\.gif|.*\.png) /oldpath/$1 [R]
于 2013-01-20T14:45:45.897 回答
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');
}
于 2013-01-20T15:35:04.767 回答