簡體   English   中英

在htaccess中使用重定向301或rewriterule來重定向並帶一個php變量

[英]Using redirect 301 or rewriterule in htaccess to redirect and take a php variable with you

我認為我的問題很簡單,但是過去幾個小時我一直在撞牆。

我的網站使用rewriterule來確保帶有php變量的凌亂路徑名現在變得整潔(我從示例中刪除了[http:// www],因為系統認為我正在放置鏈接,但不允許我這樣做)。

因此有人通過mysite.co.uk/my-product-P1.html來到我的網站,該網站將知道將mysite.co.uk/product.php?id=1發布到服務器。

但是我也想反過來整理它。 如果老客戶或老鏈接使用路徑名mysite.co.uk/product.php?id=1,那么我希望它返回mysite.co.uk/my-product-P1.html,即使舊路徑名會仍然可以正常工作。 我不希望客戶從不同的路徑名訪問同一頁面。

我該怎么做,會不會造成循環? 在另一個網站上,我可以使用:

RewriteCond %{QUERY_STRING} ^id=1$ [NC]
RewriteRule ^product\.php$ product-P1.html? [R=301,L]

但是在那個站點上只有大約10種產品,所以我可以為每種產品寫這些行。 在我的另一個站點上,我有數百種產品,因此這不切實際,我需要自動進行。

希望這是有道理的。 我已經通讀了其他帖子,但是如果在其他地方清楚地說明了我的解決方案,那么就無法道歉。

我該怎么做,會不會造成循環?

您所擁有的規則(在擁有10種產品的網站上)需要與實際請求(而不是URI)相匹配:

RewriteCond %{THE_REQUEST} \ /product\.php\?id=([^\ &]+)
RewriteRule ^ /product-P%1.html? [R=301,L]

但是最好不要在php腳本中執行此操作,而不要枚舉htaccess文件中的所有產品:

在我的其他站點上,我有數百種產品,所以這不切實際,我需要自動進行

您不能僅使用mod_rewrite來做到這一點。 您需要在product.php腳本中編寫腳本。 product.php腳本將需要檢查$_SERVER'[REQUEST_URI'] php變量,並查看它是否以/product.php開頭。

如果是,那么您知道有人直接訪問了php腳本,則需要使用$_GET['id']傳遞的ID來獲取產品名稱,然后重定向到產品名稱+ "-P$_GET['id'].html"

htaccess文件和mod_rewrite不會知道產品ID和產品名稱之間的映射,因此您需要在php腳本中執行此操作(該腳本可以訪問此映射)。

您需要以下附加規則:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+product\.php\?id=([^\s&]+) [NC]
RewriteRule ^ /product-P%1.html? [R=302,L]

暫無
暫無

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

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