2013-04-30 90 views
1

我知道在URL重寫過程中會出現很多錯誤,這就是爲什麼谷歌建議不要將URL轉換爲乾淨的URL,如果你不完全明白你在做什麼。用動態URL重寫表單提交到乾淨的URL

我想問一下,如果這是正確的方式去做這件事?

我有一個結構,像這樣一個網站:

www.example.com/index.php?widget=blue &大小= 10 &重量= 50

我使用mod_rewrite的做這麼幹淨的URL,可以使用這樣的:

www.example.com/blue/10-inches/50-grams/

我用下面的代碼來實現這一點:

RewriteEngine on 
RewriteRule ^([a-zA-Z-]+)/([0-9-]+)-inches/([0-9-]+)-grams/?$ index.php? widget=$1&size=$2&weight=$3 [NC,L] 

使這部分工作..但是有索引頁面上的表單,以及根據下拉框選擇和按下提交按鈕更改index.php頁面上的產品。

Dropdown 1 = blue, red, green 
Dropdown 2 = 10, 20, 30 
Dropdown 3 = 25, 50, 100 

默認這裏會發生什麼事是,當你選擇說,紅色,20,100,然後點擊提交,你會得到舊的URL一樣www.example.com/index.php?widget=red &大小= 20 &重量= 100

我怎麼能在這裏做重定向?我目前正在做這樣說:

更改<form action="index.php" method="GET"><form action="redirect-url.php" method="GET">

這種新的重定向消息url.php將有以下代碼:

<?php 
    header('Location: www.example.com/'.$_GET[widget].'/'.$_GET[size].'/'.$_GET[weight].'/'); 
    exit(); 

?> 

這應該引起Apache的重寫規則我張貼上面,使其工作。

想法?這會工作嗎?有更清潔的方法嗎?

回答

0

通常,在提交表單時不會使用url_rewrite,因爲沒有構建url的默認方式。有兩種方法。首先就像你說的那樣,使用中間頁面來獲取表單值並將頁眉重定向到url重寫頁面。其次是使用JavaScript構建重寫url並轉到那裏。我會建議做兩個。默認情況下,讓表單提交到將執行重定向的頁面。然後在表單上使用javascript並添加一個onsubmit事件,該事件將獲取值並將表單的操作更改爲重定向頁面。這種方式沒有不必要的重定向,如果javascript被啓用,並且如果JavaScript被禁用,你仍然有重定向頁面作爲後備。