我在 Apache 网络服务器上有一个 AngularJS 应用程序,我希望它被搜索引擎(即 Google/Bing 机器人等)索引。我有一个 PhantomJS 脚本来抓取我网站上的页面并拍摄快照,并且我已按照Google的说明将任何http://mysite.com/?_escaped_fragment_= * 请求重定向到适当的页面。
我面临的问题是我在应用程序中有几条路线可以根据锚点更改内容,例如http://mysite.com/#!/about与http://mysite.com/#! /关于#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]
我可以使用一个简单的通用规则来实现这种类型的路由吗?
对于如何使用一般重写条件解决此问题的任何其他想法将不胜感激,谢谢!