2017-05-05 34 views
1

我再次努力与.htaccess,我只是永远不会得到它。我的计划是到URL重定向htaccess从路径基于查询的URL但不包括机器人

http://example.com/page/subpage 

改变

http://example.com/page?popup=subpage 

这应该与.htaccess来完成。除此之外,我还需要Twitter和Facebook抓取工具可以访问旧网址。有没有办法做到这一点?

+0

所以旧的URL是通过'http:// example.com /页/ subpage'? “除了机器人”?请包括您“挣扎”的代码。 – MrWhite

+0

这个想法是,我有单独的子页面,以便Facebook可以抓取所有元数据。但用户应该能够直接在存档页面中看到“子页面”作为弹出窗口。 所以旧的URL是'http:// example.com/page/subpage',它应该被重定向到'http://example.com/page?popup = subpage' 我只尝试过不同的东西htaccess,到目前为止没有任何工作。正则表达式我真的很糟糕。我试过的最后一件事是'RewriteRule^page \ /([^ \ /] +)\ /?/page?subpage = $ 1 [L]' – sma

回答

1

也许我误解了,但是......这似乎是一个奇怪的要求?

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指令。

参考用户代理:

+0

感谢您的回答。但是,它仍然无法正常工作。是否可以因为wordpress正在使用的其他条目?现在,这是整个htaccess的: ' RewriteEngine叙述在 RewriteBase/ 重写规则^索引\ .PHP $ - [L] 的RewriteCond%{REQUEST_FILENAME} -f 的RewriteCond%{REQUEST_FILENAME}! -d RewriteRule。的index.php [L] 的RewriteCond%{HTTP_USER_AGENT} ^!(脸谱| Facebot) 重写规则^剧集/([^ /] +)$ /发作插曲= $ 1 [R,L] ' – sma

+0

这?指令需要“在你的......”.htaccess“文件的顶部”,在现有的WordPress指令之前。如果你把它放在WP指令之后,那么它不会做任何事情(因为WP将所有请求重写为'index.php')。 – MrWhite

+0

不幸的是它仍然无法正常工作。我把它直接放在'RewriteEngine On'下面。我也在htaccess测试工具中检查过它。这是规则不匹配。我们在这里错过什么? Htaccess对我来说就像火箭科学... – sma