在过去的几个小时里,我一直试图弄清楚这一点,但无法让它发挥作用。
我正在将谷歌发送到我的AngularJS应用程序的每个页面的服务器端生成版本。
我的角度网址如下所示:
http://localhost:8000/#!/product/123/product+name
生成的静态版本具有以下URL结构:
http://localhost:8000/product/123/product+name
所以他们都非常相似。我尝试了一些不同的重写规则配置,但到目前为止还没有。例如:
RewriteCond %{QUERY_STRING} ^_escaped_fragment_=/?(.*)$
RewriteRule ^(.*)$ /%1? [NC,L]
非常感谢任何帮助。谢谢!
编辑:
我忘了说谷歌和其他搜索引擎将哈希爆炸网址转换为像
这样的网址http://localhost:8000/?_escaped_fragment_=/product/123/product+name
当前.htaccess文件:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{QUERY_STRING} ^_escaped_fragment_=/$ [NC]
RewriteRule ^ /snapshots/index.html? [NC,L]
RewriteCond %{QUERY_STRING} ^_escaped_fragment_=/?(.*)$
RewriteRule ^(.*)$ /%1? [NC,PT]
</IfModule>
答案 0 :(得分:1)
我想我发现了这个问题。
由于符号链接上的内部重定向,请尝试使用PT
标记而不是L
标记。
这样,就会重新评估
RewriteCond %{QUERY_STRING} ^_escaped_fragment_=/?(.*)$
RewriteRule ^(.*)$ /%1? [NC,PT]
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
RewriteCond %{QUERY_STRING} ^_escaped_fragment_=/?(.*)$
RewriteRule ^(.*)$ /%1? [NC,PT]
# Redirect Trailing Slashes...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>