我在centos中使用apache 2.2来为angularjs网站提供服务。我希望允许抓取工具正确读取元内容。对于内容,我设置了一个静态php文件,该文件打印一个带有爬虫所需数据的裸html站点。 现在我的问题是将请求从抓取工具重定向到该文件。我目前正在使用
RewriteCond %{HTTP_USER_AGENT} (facebookexternalhit/[0-9]|Twitterbot|Pinterest|Google.*snippet)
RewriteCond %{REQUEST_URI} ^(.*)
RewriteRule ^(.*)$ crawler-processor.php?r=$1 [P]
在.htaccess中但不起作用。我没有运气就尝试了几种正则表达式组合。我不经常在这个级别处理apache服务器,所以我认为规则可能有点乱:)
更新 我找到了这个服务http://martinmelin.se/rewrite-rule-tester/来测试重写正则表达式。使用
RewriteCond %{REQUEST_URI} ^(.*)
RewriteRule ^(.*)$ crawler-processor.php?r=$1 [P]
它匹配得当,所以我开始认为页面中还有其他内容我不知道。这里是完整的.htaccess,也许是覆盖规则的东西
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^.*internal\ dummy\ connection.*$ [NC]
RewriteRule .* - [F,L]
#RewriteBase /
RewriteCond %{HTTP_USER_AGENT} !(facebookexternalhit/[0-9]|Twitterbot|Pinterest|Google.*snippet)
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteRule ^uploads/(.*)$ http://%{SERVER_HOST}/uploads/$1 [L]
# angularjs html5mode
# If an existing asset or directory is requested go to it as it is
RewriteCond %{HTTP_USER_AGENT} !(facebookexternalhit/[0-9]|Twitterbot|Pinterest|Google.*snippet)
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ - [L]
# If the requested resource doesn't exist, use index.html
RewriteCond %{HTTP_USER_AGENT} !(facebookexternalhit/[0-9]|Twitterbot|Pinterest|Google.*snippet)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.html
# SEO - Crawlers redirect to snapshots
RewriteCond %{HTTP_USER_AGENT} ^(facebookexternalhit/[0-9]|Twitterbot|Pinterest|Google.*snippet)
RewriteCond %{REQUEST_URI} ^(.*)
RewriteRule ^(.*)$ crawler-processor.php?r=$1 [P]
</IfModule>
除了.htaccess之外,是否可以覆盖重写的任何特定服务器设置?
UPDATE2: 检查错误日志后,似乎被击中的文件不正确
File does not exist: /var/www/vhosts/beta.host.com/httpdocs/var
为什么将第一个文件夹名称作为文件名?