长版(您可以跳到TL; DR,如果您愿意):
我正在使用由其他人设置的Wordpress网站。该网站有多个页面,页面上有标签内容,可通过#访问。例如:
www.example.com/services/category1/#tab-service1
www.example.com/services/category1/#tab-service2
www.example.com/services/category2/#tab-service1
www.example.com/services/category2/#tab-service2
www.example.com/services/category2/#tab-service3
现在,当搜索引擎索引时,他们只会为www.example.com/services/category1/
和www.example.com/services/category2/
编制索引。这就产生了一个问题,即我们不能让搜索引擎直接指向给定选项卡中的内容。我们想要的是搜索引擎显示将用户直接带到(例如)www.example.com/services/category2/#tab-service3
的链接。
现在,我不认为谷歌可以自己索引这样的基于#的内容。所以,我正在考虑使用apache重写来尝试解决此问题。我只能访问.htaccess文件(从配置角度来看)。
TL; DR
如何使用apache重定向将www.example.com/services/category1/service3/
重定向到www.example.com/services/category1/#tab-service3
(我可以访问.htaccess文件)?
这就是我正在尝试的但是它不起作用:
Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/services/category1/([a-z0-9])/? [NC]
RewriteRule .* /services/category1#tab-%1 [R,NE,L]
有人还建议调查pushState服务器配置来解决这个问题。我不知道如何使用pushState。
更新:
我已将重写更新为以下内容但仍无效。它一直显示Wordpress的'404页
<IfModule mod_rewrite.c>
Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /domainfolder/
RewriteCond %{REQUEST_URI} ^/services/category1/([a-z0-9]+)/?$ [NC]
RewriteRule ^/services/category1/([a-z0-9]+)/?$ /services/category1/#$1 [NE,R,L]
</IfModule>
答案 0 :(得分:0)
您的%{REQUEST_URI}
正则表达式错误。模式^/services/
category1/([a-z0- 9 ])/?
匹配/services/category1/{any 1 char of a-z or 0-9}
格式,后跟可选的斜杠。因此,这与您的请求/services/category1/service3
不符,但与/services/category1/a/
匹配。
您应该使用
^/services/category1/([a-z0-9]+)/?$