我在Apache网络服务器上有一个AngularJS应用程序,我想通过搜索引擎(即Google / Bing机器人等)编制索引。我有一个PhantomJS脚本来抓取并拍摄我网站上的网页快照,我已经关注了the instructions from Google如何将任何http://mysite.com/?_escaped_fragment_= *请求重定向到相应的网页。
我面临的问题是,我在应用中有一些路径可以根据锚点更改内容,例如http://mysite.com/#!/about与http://mysite.com/#!/about#overview不同。我希望将这些更改编入索引,但是哈希字符'#'用于注释,甚至用反斜杠转义它也不起作用。我已经咨询了其他SO答案(例如Apache rewrite condition for ajax crawling和mod_rewrite page anchor),但我没有找到如何处理锚点的说明。
我有两个问题。
有没有办法将使用mod_rewrite的URL重定向到包含锚点的快照?例如,使用转义版“#”('%23'):
http://mysite.com/?_escaped_fragment_=about%23overview => http://mysite.com/snapshots/about#overview.html
这是我目前在.htaccess文件中的内容,但它不适用于包含锚点的页面:
RewriteEngine On
Options +FollowSymLinks
# Route for the index page
RewriteCond %{QUERY_STRING} ^_escaped_fragment_=/$
RewriteRule ^(.*)$ snapshots/index.html [NC,L]
# All other routes
RewriteCond %{QUERY_STRING} ^_escaped_fragment_=/?(.*)$
RewriteRule ^(.*)$ snapshots/%1.html [NC,L]
如果不允许(1),我对如何解决这个问题的想法是将所有'#'替换为'。'在快照的文件名中。然后我需要一个mod_rewrite规则,将'#'替换为'。'在escaped_fragment查询参数中。回到我的示例,我目前有一条规则可以采用/?_ escaped_fragment_ = about#overview并将其重新路由到/snapshots/about.overview.html。
RewriteCond %{QUERY_STRING} ^_escaped_fragment_=/about%23overview$
RewriteRule ^(.*)$ snapshots/about.overview.html [NE,NC,L]
我是否可以使用简单的通用规则来实现此类路由?
有关如何通过一般重写条件解决此问题的任何其他想法将不胜感激,谢谢!
答案 0 :(得分:1)
我相信以下规则适合您:
RewriteCond %{QUERY_STRING} ^_escaped_fragment_=([^&]+) [NC]
RewriteRule ^$ /snapshots/%1.html? [R,NE,L]
它会将/?_escaped_fragment_=about%23overview
重定向到/snapshots/about%23overview.html