Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 爬网时Mod Rewrite生成404(在浏览器中查看时工作正常)_Php_.htaccess_Mod Rewrite_Web Crawler - Fatal编程技术网

Php 爬网时Mod Rewrite生成404(在浏览器中查看时工作正常)

Php 爬网时Mod Rewrite生成404(在浏览器中查看时工作正常),php,.htaccess,mod-rewrite,web-crawler,Php,.htaccess,Mod Rewrite,Web Crawler,我的.htaccess中有以下代码: RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] RewriteEngine On RewriteCond %{HTTP_HOST} ^jasonleodurbin\.com$ [NC

我的.htaccess中有以下代码:

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteEngine On
RewriteCond %{HTTP_HOST} ^jasonleodurbin\.com$ [NC]
RewriteRule ^(.*)$ http://www.jasonleodurbin.com/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z]+)/$ index.php?go=$1&app=1 [NC,L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z]+)?success=true index.php?go=$1&success=1 [NC,L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z]+) index.php?go=$1 [NC,L,QSA]
我的漂亮链接转换是在我的index.php上完成的。如果用户正在寻找不存在的内容,将生成404标题,否则将显示内容

这一切都很好,但是当爬虫或其他东西试图查看HTML时,他们会收到404错误

例如:

这种联系应该很好

如果您试图在HTML验证器上验证它,它将不起作用。爬虫说它得到了一个404。我在脸书分享上也得到了同样的收获

我已经尝试删除404错误头,但仍然遇到同样的问题

怎么回事?有什么建议吗

编辑:

新.htaccess:

RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteEngine On
RewriteCond %{HTTP_HOST} ^jasonleodurbin\.com$ [NC]
RewriteRule ^(.*)$ http://www.jasonleodurbin.com/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z]+)/$ index.php?go=$1&app=1 [NC,L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z]+)?success=true index.php?go=$1&success=1 [NC,L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-z]+) index.php?go=$1 [NC,L,QSA]
处理:

globals.php

if(!isset($_GET['go']) || $_GET['go'] == "") $_GET['go'] = "home";
header.php

if(isset($_GET['go']) && !@fopen(strtolower($_GET['go']).".php",'r')){
    //header("HTTP/1.0 404 Not Found");
    define("FAIL",true);
    $_GET['go'] = "error";
}
else {
    define("FAIL",false);
Header('HTTP/1.1 200');
}
if(FAIL) define("GOSUB",DIR);
if(isset($_GET['app'])) define("GOSUB","../");
else define("GOSUB","");
我还在index.php中尝试了以下方法:

<?Header('HTTP/1.1 200 OK');?>
<? require_once("header.php");?>
<? require_once(strtolower($_GET['go'].".php"));?>

    </div>
</div>
<?
    if(!defined("FOOTER"))define('WP_USE_THEMES', false);
    define("FOOTER",true);
    include("blog/index.php");
?>
<!--[if IE]>
<a href='http://www.google.com/chrome' title='Get Google Chrome : A Better Way To Browse' class='noie sprite-1'>IE Sucks</a>
<![endif]-->
<!--[if lt IE 7]>
<div style='position:absolute;top:60px;left:0px;'><b>IE 6</b>?! Dude, upgrade. <br>Click the link above to get Google Chrome.</div>
<![endif]-->
</body>
</html>


有些东西在我发送200之前就发送了404。

我确实看到了公文包页面,但带有404标题。所以,检查设置404头的代码,错误就在那里的某个地方


在我看来,您使用
fopen
只是为了查看文件是否存在(如果打开失败,则文件不存在)。使用
file\u exists()
:您似乎在使用Wordpress。Wordpress将找不到的任何页面设置为404


你也可能对插件感兴趣。它使用301重定向将所有404页重定向到首页。这是。

您确定代码中没有其他地方可以发送另一个404吗?如果没有其他人找到,那么您的配置似乎有问题,请尝试在页面被批准时发送相反的
200 OK
标题


顺便说一句,如果不使用fopen(strtolower($\u GET['go']),用户可以将
$\u GET['go']
设置为
http://his.domain.com/page
,如果PHP的配置允许的话,您最终会从他的服务器中包含一个页面(
allow\u url\u fopen
).

我使用wordPress来编辑/blog sub.@Jason,你能发布index.php文件的内容吗?如果这是你的.htaccess文件,它应该放在/blog目录中,否则wordPress将控制页面。我将用我编辑的.htaccess和我所做的处理来编辑我的原始文章。@Jason-你为什么把wordPress
包括在日志中但是,在您的
/index.php
文件中有dex.php
文件?我这样做是因为wordpress环境在博客子目录中。我将其包括在内以获取我的页脚。可能它没有达到200路径?请尝试
var\u dump(失败)
为了确定执行的路线。请检查我的答案,我编辑了它,添加了一个重要的注释。奇怪的配置在哪里?我在我维护的其他网站上也使用了相同的想法。(例如)唯一的区别是它们不在public_html文件夹中。它们都在单独的文件夹中。这可能是一个问题吗?酷。我会做那个更改。我假设只做一个目录列表,看看我的文件是否存在?我将200放在if语句的外面,这意味着它一定已经通过了。仍然没有。你在你的qu中发布的链接上面的估计是,它有一个输入错误,应该是,问题可能是你无意中检查了无效链接?谢谢,我更改了文件_exists()。404仍然没有修复。