2017-02-14 110 views
1

我們有一個運行在PHP 5.5上的應用程序& Laravel 5.2。它有一個用戶帳戶區域,其中所有路由都以/ account /爲前綴。帳戶區域的默認路由是/ account/services。登錄後,用戶默認路由到此頁面。在Word或Excel(PHP,Laravel)中點擊URL時路由無法正常工作

當然,如果用戶輸入特定的帳戶區域URL(例如example.com/account/billing),它們將在登錄時進入結算頁面(或直接進行驗證)。但是,如果我在Excel或Word中點擊https://example.com/billing,我將轉到默認的/ account/services頁面(如果通過身份驗證;否則我會在登錄後進入該頁面)。

起初我相信這是因爲他們插入隱藏的字符並因此使URL無效,導致我們的應用程序將用戶路由到默認URL。

所以,我想這些解決方案:

  • trim()的URL
  • 刪除不間斷空格:$url = preg_replace('~\x{00a0}~','',$reqURL);
  • 函數刪除字節順序標記(來源here

我甚至將測試網址從瀏覽器複製到NPP中,並以十六進制形式查看。似乎沒有任何額外的字符。

如果我手動在瀏覽器欄中輸入相同的URL,則一切正常。

這隻發生在需要驗證的網址上,公共/前端網址似乎不受影響。這導致我this answer,但我不知道它適用於我們的情況。 Microsoft確實在瀏覽器中打開這些URL之前運行Microsoft Office協議發現,但我們的身份驗證Cookie正在被識別(瀏覽器打開登錄頁面,但如果用戶具有有效的cookie,則立即重定向到帳戶區域)。

有沒有其他人經歷過這個?我還能看到其他什麼原因?

回答

0

微軟的用戶代理確實是罪魁禍首。

我用一個.htaccess規則解決了這個問題,該規則返回了來自與Office相關的用戶代理的請求的200響應。 (之前,Laravel正在返回一個302重定向到登錄頁面,因爲這些路由需要身份驗證。)這使得Office使用預期的URL打開瀏覽器(如果它們未經過身份驗證,它們仍然被重定向到登錄表單,但是登錄後重定向現在可以完美運行)。

# Return 200 to Microsoft Office user agents to resolve redirection issue 
RewriteEngine on 
RewriteCond %{HTTP_USER_AGENT} MSOffice [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} Microsoft\ Office\ Word [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} Office [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} Microsoft\ Office\ PowerPoint [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} ms\-office [NC] 
RewriteRule .* - [R=200,L] 

我也試過這個規則,它返回一個「不允許的方法」應對MS Office的協議用戶代理,但它並沒有解決問題。

# Intercept Microsoft Office Protocol Discovery 
RewriteCond %{REQUEST_METHOD} ^OPTIONS 
RewriteCond %{HTTP_USER_AGENT} ^Microsoft\ Office\ Protocol\ Discovery [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Microsoft\ Office\ Existence\ Discovery [OR] 
RewriteCond %{HTTP_USER_AGENT} ^Microsoft\-WebDAV\-MiniRedir.*$ 
RewriteRule .* - [R=405,L]