2012-09-10 99 views
0

我已經啓用mod_rewrite模塊,一切正常。mod_rewrite:如何禁用不清潔的URL重寫規則導航

我爲url創建了簡單的規則,但是如何禁用帶參數的url導航(重寫)呢?

例如:

# rewrite rule for cleaning 
RewriteRule ^bookstore/([0-9]+)?$ /bookstore/book.php?id=$1 [L] 

現在,如果我瀏覽到http://mydomine.com/bookstore/123全部完成,但是URL http://mydomine.com/bookstore/book.php?id=123也通航。

我怎樣才能使可見和bavigable只有第一個?

回答

0

一下添加到同一個htaccess文件:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /bookstore/book\.php\?id=([0-9]*) 
RewriteRule ^bookstore/book\.php$ /bookstore/%1? [L,R=301] 

這將重定向301與查詢字符串到一個沒有對URI請求。

+0

,您的解決方案能夠正常工作,除了一件事情: 當我瀏覽鏈接http://mydomine.com/bookstore/123查詢字符串參數/值將自動附加,這是結果: http://mydomine.com/bookstore/123?id=123 請問,你能再次幫助我刪除附加的querystring(id = 123)? – Gabrik

+0

@Gabrik我在'/ bookstore /%1'結尾忘了'?',編輯我的回答 –

+0

非常感謝@Jon Lin! – Gabrik

0

不是100%確定這一點,但我認爲,如果你重寫A到B,那麼A和B都會工作。

我想問問爲什麼究竟是http://mydomine.com/bookstore/book.php?id=123也可導航的問題?如果該鏈接有效,並且用戶可以同時使用這兩個鏈接,那麼問題是什麼?儘管需要一些時間和運氣才能發現第二個選項。他們通過那樣獲得?你會輸了?如果兩種情況下的答案都是「無」,那麼請停下來擔心。 :)如果您以前使用舊鏈接,現在用新鏈接替換,那麼這是一個好的,您的客戶的舊書籤仍然可以使用。

但是,假設您有一個很好的原因來禁用舊網址,那麼更改這兩個網址又是如何。例如,將「book.php」重命名爲「xyz.php」,然後將http://mydomine.com/bookstore/123重定向到http://mydomine.com/bookstore/xyz.php?id=123 - 舊的http://mydomine.com/bookstore/book.php?id=123將停止工作。

好吧,那醜陋解決方案,但你可以把它更好,如果不是重命名這些文件,你只要將它們移到一個子目錄,像http://mydomine.com/xyz/bookstore/book.php?id=123。或者,您可以使用重定向來添加「祕密」參數,然後在PHP文件中檢查它,例如將http://mydomine.com/bookstore/123重寫爲http://mydomine.com/bookstore/book.php?id=123&secret=xyz。當然,這僅僅是一種「默默無聞的安全性」,但是再一次......通過發現你的真實URLs,獲得究竟會發生什麼?

+0

你認爲是對的。我們正在發佈主要版本,並且客戶要求只有乾淨的網址,這就是原因。 當然,爲了讓您的用戶/客戶能夠訪問舊網址鏈接 – Gabrik