2017-05-05 60 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

相關問題