簡體   English   中英

了解重定向和重寫.htaccess之間的區別

[英]Understanding difference between redirect and rewrite .htaccess

我想了解使用.htaccess重定向和重寫URL之間的區別。 所以這是一個例子:說我有一個像www.abc.com/ index.php?page=product_types&cat=88這樣的鏈接www.abc.com/ index.php?page=product_types&cat=88 (稱之為“原始”網址)

但是當用戶鍵入abc.com/shoes (讓我們將其稱為“所需的”URL)時,他們需要查看上述鏈接的內容。 要做到這一點,我會這樣做:

Options +FollowSymLinks
RewriteEngine on
RewriteBase /
RewriteRule ^(.*)shoes(.*)$ index.php?page=product_types&cat=88

這段代碼沒有錯,它可以解決問題。 但是,如果我在地址欄中輸入原始網址,則會顯示內容,但網址不會更改。 所以它仍然是www.abc.com/index.php?page=product_types&cat=88

但是,如果我輸入www.abc.com/ index.php?page=product_types&cat=88我希望所需的網址( /shoes )顯示在地址欄中怎么辦? 如何使用.htaccess實現這一目標? 我是否遇到了潛在的循環?

有些解釋可以在這里找到: https//stackoverflow.com/a/11711948/851273

要點是重寫只發生在服務器上,客戶端(瀏覽器)對它視而不見。 瀏覽器發送請求並獲取內容,為了提供請求,服務器上發生的事情並不明智。

重定向是服務器請求的響應 ,它告訴客戶端(瀏覽器)提交新請求。 瀏覽器要求輸入網址,此網址是位置欄中的內容,服務器獲取該請求並使用重定向進行響應 ,瀏覽器獲取響應並在服務器的響應中加載URL。 位置欄中的URL現在是新URL,瀏覽器會發送新URL請求。

簡單地在服務器上進行內部重寫對於野外的URL完全沒有任何意義。 如果google或reddit或其他任何網站都鏈接到www.abc.com/index.php?page=product_types&cat=88 ,您的內部服務器重寫規則絕對不會對此產生任何影響,也不會對點擊該鏈接或任何客戶端的任何人碰巧因任何原因請求該URL。 所有重寫規則都會在內部將包含shoes更改為服務器中的/index.php?page=product_types&cat=88

如果你想讓它為index.php頁面提供所有查詢字符串的請求,你可以告訴客戶端(瀏覽器) 重定向到看起來更漂亮的URL。 你需要小心,因為重寫規則循環,你的重定向將在內部重寫,這將導致重定向,將在內部重寫等。導致循環,並將拋出500服務器錯誤。 所以你可以專門匹配請求本身:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\?page=product_types&cat=88
RewriteRule ^/?index.php$ /shoes [L,R=301]

這應該僅用於制作它,以便野外鏈接指向正確的位置。 您必須確保您的內容生成正確的鏈接 這意味着您網站上的所有內容都使用/shoes鏈接而不是/index.php?page=product_types&cat=88鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM