我再次努力与.htaccess
,我只是永远不会得到它。我的计划是到URL重定向htaccess从路径基于查询的URL但不包括机器人
http://example.com/page/subpage
改变
http://example.com/page?popup=subpage
这应该与.htaccess
来完成。除此之外,我还需要Twitter和Facebook抓取工具可以访问旧网址。有没有办法做到这一点?
我再次努力与.htaccess
,我只是永远不会得到它。我的计划是到URL重定向htaccess从路径基于查询的URL但不包括机器人
http://example.com/page/subpage
改变
http://example.com/page?popup=subpage
这应该与.htaccess
来完成。除此之外,我还需要Twitter和Facebook抓取工具可以访问旧网址。有没有办法做到这一点?
也许我误解了,但是......这似乎是一个奇怪的要求?
RewriteRule ^page\/([^\/]+)\/? /page?subpage=$1 [L]
提供,这是靠近你的根.htaccess
文件,然后这种顶部做你的要求,除非这是一个内部重写,不是外部重定向照你的意见在问题中。这也是无条件的,所以它会“重定向”每个人,包括机器人(即Facebook)。 (正则表达式还包含不必要逃脱,但只是影响可读性。斜线携带mod_rewrite的正则表达式没有特殊的意义,因为它不是用作分隔符。)
使成这种重定向,你所需要的R
标志。为了排除Facebook和Twitter机器人,您需要添加前面的条件来检查用户代理。所以,这样的事情:
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} !^(facebook|Facebot)
RewriteCond %{HTTP_USER_AGENT} !^Twitterbot
RewriteRule ^page/([^/]+)$ /page?popup=$1 [R,L]
注意,user-agent头可以伪造,因此任何人都可以伪装成一个机器人,如果他们想。这也排除了URL上的尾部斜线(就像你的例子)。如果尾部斜线确实是可选的,则将RewriteRule
模式更改回^page/([^/]+)/?$
。这是一个临时(302)重定向。
的RewriteCond
指令只允许访问时HTTP_USER_AGENT
领域确实不(!
前缀)开始与“脸谱”或“Facebot”。
要排除更多的漫游器,您需要通过用户代理识别这些漫游器,并包含其他RewriteCond
指令。
参考用户代理:
感谢您的回答。但是,它仍然无法正常工作。是否可以因为wordpress正在使用的其他条目?现在,这是整个htaccess的: '
这?指令需要“在你的......”.htaccess“文件的顶部”,在现有的WordPress指令之前。如果你把它放在WP指令之后,那么它不会做任何事情(因为WP将所有请求重写为'index.php')。 – MrWhite
不幸的是它仍然无法正常工作。我把它直接放在'RewriteEngine On'下面。我也在htaccess测试工具中检查过它。这是规则不匹配。我们在这里错过什么? Htaccess对我来说就像火箭科学... – sma
所以旧的URL是通过'http:// example.com /页/ subpage'? “除了机器人”?请包括您“挣扎”的代码。 – MrWhite
这个想法是,我有单独的子页面,以便Facebook可以抓取所有元数据。但用户应该能够直接在存档页面中看到“子页面”作为弹出窗口。 所以旧的URL是'http:// example.com/page/subpage',它应该被重定向到'http://example.com/page?popup = subpage' 我只尝试过不同的东西htaccess,到目前为止没有任何工作。正则表达式我真的很糟糕。我试过的最后一件事是'RewriteRule^page \ /([^ \ /] +)\ /?/page?subpage = $ 1 [L]' – sma