我知道有办法验证网址是否返回404。 我一直在使用以下功能,它一直工作正常,但我的问题是,我想验证一个域的URL,根据我所在地区使用的语言,将我重定向到子域。
function page_404($url) {
$handle = curl_init($url);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, false);
/* Get the HTML or whatever is linked in $url. */
$response = curl_exec($handle);
/* Check for 404 (file not found). */
$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
curl_close($handle);
/* If the document has loaded successfully without any redirection or error */
if ($httpCode >= 200 && $httpCode < 300) {
echo $httpCode."<br/>";
return false;
} else {
echo $httpCode."<br/>";
return true;
}
}
例如:
https://example.com/video/123456
我被重定向到以下网址:
https://es.example.com/video/123456
这意味着它是一个http代码&#34; 301&#34;并且我的函数将其检测为重定向,因此给出了视频不存在的答案,但实际上它仅存在于我重定向到该子域的域。
如果我为$ httpCode&lt; 303更改$ httpCode&lt; 300行,它就可以了。
但问题是,当收到无效网址时,此页面会将我重定向到其主网页,因此我没有收到404代码,它会为我提供301或303.
我该怎么办?我希望我做得很好。
答案 0 :(得分:2)
您可以告诉cURL
遵循所有重定向,并从最终重定向返回结果。使用:
curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true);
答案 1 :(得分:0)
你可能想要这个递归,因为你可以重定向到一个重定向到页面的页面......好吧,你明白了。并且您想知道最终页面是否存在。并且您事先不知道要到达那里需要多少次重定向。
你需要一个条件后:
$(function() {
// Get the form.
var form = $('#form');
// Get the messages div.
var formMessages = $('#form-messages');
// Set up an event listener for the contact form.
$(form).submit(function(event) {
// Stop the browser from submitting the form.
event.preventDefault();
// Serialize the form data.
var formData = $(form).serialize();
// Submit the form using AJAX.
$.ajax({
type: 'POST',
url: 'mail.php',
data: formData
})
.done(function(response) {
// Make sure that the formMessages div has the 'success' class.
$(formMessages).removeClass('error');
$(formMessages).addClass('success');
// Set the message text.
$(formMessages).text(response);
// Clear the form.
$('#ime').val('');
$('#email').val('');
$('#poruka').val('');
})
.fail(function(data) {
// Make sure that the formMessages div has the 'error' class.
$(formMessages).removeClass('success');
$(formMessages).addClass('error');
// Set the message text.
if (data.responseText !== '') {
$(formMessages).text(data.responseText);
} else {
$(formMessages).text('Oops! An error occured and your message could not be sent.');
}
});
});
});
这样的事情:
if ($httpCode >= 200 && $httpCode < 300) {
(这假设重定向代码是301和302 ..可能还有其他我不包括的内容,因此请相应地调整它)。然后在这里,获取您被定向到的URL,然后让该函数使用此URL调用自身。它将为每个重定向执行此操作。
但是,如果你这样做,你可能想要添加第二个参数,这样你就可以知道你称之为的次数,例如:
} elseif ($httpCode >= 301 && $httpCode <= 302) {
所以当你稍后再打电话时,你会这样做:
function page_404($url, $iteration = 1)
然后,在开始时,请检查以确保您最终进行无限重定向:
page_404($url, $iteration + 1);
如果遇到重定向10或15次的网址,大多数浏览器都会呕吐,因此这可能是一个相当安全的数字,也是一种安全行为。否则,如果您点击配置错误的网址,您最终可能会永远重定向。