我想重新安排我的网站,并将所有客户页面移动到一个目录(/ customerPages)中,同时保持相同的URL(访问页面的URL和浏览器中显示的URL)。我正在使用Apache
和PHP
(CakePHP
)。
我尝试按以下方式重新布线 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
而没有运气。
如何使用第一种,第二种或任何其他方法实现这一目标?
答案 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');
}