2011-07-29 16 views
2

我已经从我的应用程序URL中移除了index.php,就像在网络上显示的一样。但之后我有一个奇怪的问题。从URL中删除index.php后,无法使用抓取工具访问网页

我可以像这样使用浏览器访问网站... http://www.oakquotes.com/quotes/author/etc-etc(注意缺少index.php),但是当我尝试使用爬虫访问相同的URL时,我得到了禁止403 http错误。

这里是robots.txt文件:

User-agent: * 
Allow:/quotes/topic 
Allow:/quotes/author 
Disallow: 

Sitemap: http://www.oakquotes.com/Sitemap.xml 
Sitemap: http://www.oakquotes.com/author_sitemap.xml 
Sitemap: http://www.oakquotes.com/topic_sitemap.xml 

我认为罪魁祸首是我写来从URL中删除index.php文件中的.htaccess规则。以下是htaccess的代码:

<IfModule mod_rewrite.c> 
    # For security reasons, Option followsymlinks cannot be overridden. 
    # Options +FollowSymlinks 
    Options +SymLinksIfOwnerMatch 
    RewriteEngine On 
    RewriteBase/
    RewriteCond $1 !^(index\.php|images|robots\.txt|Sitemap\.xml|topic_sitemap\.xml|author_sitemap\.xml|search\.html|style|js|system|application|quotes/authors|quotes/topic|application/controllers|application/views) 
    RewriteRule ^(.*)$ ./index.php/$1 [L] 
</IfModule> 

我是否缺少一个步骤?在这方面请帮助我。谢谢。

+0

是什么,当你得到403错误日志中说,将打印错误消息? –

+1

*您确定抓取程序正在使用主机标头? *爬虫是否能够访问此网站? *访问和错误日​​志说什么? *爬虫程序是否提供了有关它所得到的响应的更多细节? – Cal

+0

是的,它说foorbidden 403响应中的http状态...日志不显示任何实际...我认为它与url重写有关的一些问题... –

回答

0

使用常规浏览器,您还会收到403错误。为什么会显示一个网站的原因是:

一个基本的认证将始终返回403错误。在大多数服务器上,ErrorDocument 403的全局规则被定义为403.html。如果403错误被触发,服务器将在内部查找错误文档403.html。这个文件不存在,你的RewriteRule匹配,服务器返回呈现的index.php页面。这就是为什么你看到一个网页,即使它返回了403错误。更复杂的是,因为403.html网站不存在,查找403.html网站会触发404(找不到网页)。这是全局定义的ErrorDocuments的问题。由于定义了500.html,500错误将触发404错误。

尝试定义您的一个ErrorDocument的处理在你的.htaccess,你会看到其中的差别。

ErrorDocument 403 "Access denied" 

这条规则,如果一个错误403被触发,将停止index.php文件的渲染