从URL中删除index.php后,无法使用爬网程序访问网页

时间:2011-07-29 18:54:02

标签: php .htaccess codeigniter mod-rewrite url-rewriting

我已从网络上显示的应用程序网址中删除了index.php。但事后我有一个奇怪的问题。

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

这是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

我认为罪魁祸首是我编写的.htaccess规则,用于从URL中删除index.php。这是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>

我错过了一步吗?请帮助我这方面。感谢。

1 个答案:

答案 0 :(得分:0)

使用常规浏览器,您还会收到403错误。显示网站的原因如下:

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

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

ErrorDocument 403 "Access denied"

如果触发错误403并且将停止呈现index.php,此规则将打印错误消息