2011-05-10 96 views
1
RewriteRule ^(.*)_([^]+).htm/([0-9.]+)$ a.php?f=$1&t=$2&amt_from=$3 [NC] 

我使用3個參數調用了a.php。我能夠使用上面的重寫規則,並且a_b.htm/c可以工作。在PHP中重寫url

我的問題是,當用戶點擊提交表單按鈕,他們仍然可以看到 a.php?f=$1&t=$2&amt_from=$3

我該如何解決呢?

非常感謝。

+0

在給定的URL與請求的URL匹配後,您是否有任何重寫規則? – outis 2011-05-10 20:10:25

+0

您可以顯示a.php的實際表單或完整內容嗎? – John 2011-05-10 20:30:54

回答

0

那是因爲你仍然有method="get"提交,那麼表單創建網址的這種形式..

使用POST,如果你不想讓用戶看到的網址提交的數據

+0

謝謝尼爾。我明白,但我希望用戶在地址欄中看到a_b.htm/c。如何做到這一點? – jon 2011-05-10 20:13:18

+0

你真的不能...除非從你的PHP腳本你檢查網址,如果它不是你想要的然後做一個頭重定向 – Neal 2011-05-10 20:14:08

+0

嗯,這應該是一個很好的解決方案。很多人這樣做?我是新的PHP的東西 – jon 2011-05-10 20:16:23

1

你需要你的表單來生成正確的URL。這隻適用於一些Javascript,但基本上可以這樣工作:

<form action="a.php" method="GET" onsubmit="rewrite_form(event);"> 
    <input name=f value=123> 
    <input name=t value=ABCABC> 
    <input name=amt_from value=XYZXYZXYZ> 
    <input type=submit> 

<script type="text/javascript"> 
    function rewrite_form(e) {  
     var form = document.forms[0]; // .getElementById("form1"); 
     window.location = '' + form.f.value + '_' + form.t.value + '.htm/' + form.amt_from.value;    
     if (e && e.preventDefault) { e.preventDefault(); } 
     return false; 
    } 
</script> 

所以基本上表單提交會生成您想要的更好的URL。如果瀏覽器不支持Javascript,它將回退到更復雜的GET參數化URL。

樂更新:表單元素訪問不正確,你通常只需要document.forms[0].fieldname.value。我已經將URL構造移植到一個單獨的函數中。在Opera/Chrome/Firefox中使用event.preventDefault();時,onsubmit=方法運行良好。

+0

我會稍後嘗試。非常感謝 – jon 2011-05-10 20:39:39

+0

嘿,馬里奧,我是新來的這些。你碰巧有我的問題的例子嗎?如果我得到$ f/$ t並在url中使用解析的$ f_p/$ t_p,如果我需要做一些解析呢?非常感謝 – jon 2011-05-11 01:11:24

+0

我不知道你的解析是什麼意思。在這裏,您已經有了正確的RewriteRule,用於示例JS網址連接。 - 或者你爲什麼要解析它? – mario 2011-05-11 01:22:10