我试图重定向,如果我的网站上不存在图像

时间:2016-06-28 20:24:02

标签: php .htaccess redirect

我有一个网站,如果用户转到www.example.com/string并且string.jpg中存在www.example.com/images/profile/,那么我希望它重定向到www.example.com/index.php?u=string但是如果图像不存在我希望它重定向到www.example.com

我已尝试在.htaccess中使用以下内容

RewriteRule ^(.*)$ /index.php?u=$1 [NC,L,QSA]

但即使图像没有退出,也会重定向evrything

4 个答案:

答案 0 :(得分:0)

因此,如果用户请求页面A,并且文件B存在,请转到C?

我不认为apache开发人员认为只有在某些存在的情况下重定向才有用。至少我看不到目的。

但如果所有内容都重定向到index.php,那么就把代码放在那里检查文件的存在,然后让index.php再次重定向到首页。

但是,反过来也不是index.php的默认页面吗?

答案 1 :(得分:0)

您需要使用RewriteCond检查文件是否存在。如果是,则重定向到该图像,否则将请求传递给index.php

# Make sure it's not a direct URL to a file or a directory.
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

# Check if the request URI exists in the images folder.
RewriteCond %{DOCUMENT_ROOT}/images/profile%{REQUEST_URI}.jpg -f

# If the image exists, redirect to that.
RewriteRule ^ %{DOCUMENT_ROOT}/images/profile{%REQUEST_URI}.jpg [L]

# By default, pass the request string to our application.
RewriteRule ^ index.php?u=%{REQUEST_URI} [L,QSA]

答案 2 :(得分:0)

你需要检查file_exists('filename'),一个现有的PHP函数。

然后您可以相应地使用PHP标头重定向。

这将完全避免RewriteRule,您可以添加适当的PHP标头。

为了使这项工作,您需要在URL中检测文件 .jpg,将请求发送到PHP文件(检查文件是否存在),然后最终重定向您想要使用的PHP重定向标题。

答案 3 :(得分:-1)

为什么不在PHP中这样做呢?您的重写规则会重定向所有内容,因此请将其保留。现在只需在index.php中输入以下代码:

<?php
if( isset($_GET['u']) && !file_exists('./images/profile/'.basename($_GET['u'])) ) {
    header('Location: http://www.example.com');
    exit(0);
}

//Do all your other wonderful stuff here.. for instance:
if( isset($_GET['u']) && file_exists('./images/profile/'.basename($_GET['u'])) {
    header('Content-Type: image/png');
    readfile('./images/profile/'.basename($_GET['u']));
    exit(0);
} else {
    echo("Hello world!");
}

显然要注意不要创建一个无限循环重定向(例如,如果index.php是你的默认页面,将人们重定向到默认页面会将它们置于无限循环中,重定向到同一页面。)