Apache重写以将基于#的URL映射到正确的URL

时间:2018-02-10 16:24:45

标签: wordpress apache .htaccess mod-rewrite url-rewriting

长版(您可以跳到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>

1 个答案:

答案 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]+)/?$