2012-05-23 191 views
0

我有聯繫這樣的:對待Safari瀏覽器比其他瀏覽器的.htaccess不同

www.domain.com/page.php?id=1#info 

我只是想隱藏.php爲得到這個:

www.domain.com/page?id=1#info 

出於這個原因,我發現這個腳本的.htaccess:

RewriteEngine敘述上

# to make `/path/index.php` to /path/ 
RewriteCond %{THE_REQUEST} ^GET\s(.*/)index\.php [NC] 
RewriteRule . %1 [NE,R=301,L] 

RewriteCond %{THE_REQUEST} ^GET\s.+\.php [NC] 
RewriteRule ^(.+)\.php$ /$1 [NE,R=301,L,NC] 

RewriteCond %{REQUEST_URI} !\.php$ [NC] 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule . %{REQUEST_URI}.php [L] 

這不正是這份工作,並在所有瀏覽器的工作原理,除了Safari瀏覽器,這將輸出:

www.domain.com/page?id=1 

的#info不見了。

瀏覽器如何解釋.htaccess不同?有人可以幫我寫出正確的.htaccess文件嗎?

回答

2

Safari瀏覽器的行爲方式每個瀏覽器應該:

片段取決於文檔的MIME類型,並由 客戶(Web瀏覽器)進行評估。客戶端當它們檢索文檔時並不需要發送 URI片段 到服務器,並且沒有來自 本地應用程序(參見下文)的幫助片段不參與HTTP 重定向。

Wikipedia: Fragment identifier

用簡單的英語:在#後的URL的一部分,不應該被瀏覽器發送到服務器。瀏覽器應該在本地處理。這意味着您在應用重定向時可能會丟失碎片(重寫規則)。

+0

好的,這非常有趣,謝謝!但是,在不丟失標識符的情況下處理重寫的正確方法是什麼? – Melros

+0

這是不可能的。 – Jonathan

+0

我想我可以使用一個規則,它會將沒有php的鏈接解釋爲帶有php結尾的文件,但是因此我會重命名我的頁面中的所有鏈接,我認爲這不是正確的方式。或者是? – Melros

相關問題