2011-12-21 50 views
2

我想創建一系列mod_rewrite規則來製作漂亮的url。.htaccess mod_rewrite challenge

我想就可以提供index.php?section=123&area=345&option=1 as /123/345/option=1

到目前爲止好,這個工程:

RewriteRule ^(.+)/(.+)/(.+)$ /index.php?section=$1&area=$2&$3 

確定這裏是我的第一個問題:

  1. 如何強制它,如果工作其中一個變量沒有定義,即。如果有人瀏覽到/section而不是/section/area/。如果它已被關閉,我可以使htaccess自動創建/area/作爲默認值嗎?

  2. 同樣,我如何強制/area/有斜線?如果目前沒有斜線,我會得到一個404,因爲系統正在尋找但沒有找到第三個變量。

回答

1

您正在尋找這樣的事情,

RewriteRule ^(.+)/(.+)/(.+)|(.+)/(.+)/?|(.+)/?$ /index.php?section=$1&area=$2&$3 

遊馬通過分離[OR]標誌的子patters。

此模式可能無法使用。您可能需要修改。

+0

謝謝這很好地指出了我的正確方向。爲了清晰起見,我最終將不同的規則分開了,但是這基本上是對代碼的修改: 'RewriteRule ^(。+)/(。+)/(。+)$ /index.php?section=$1&area = $ 2&$ 3 [L] RewriteRule ^(。+)/(。+)/ $ /index.php?section=$1&area=$2 [L] RewriteRule ^(。+)/(。+)$/index .php?section = $ 1&area = $ 2 [L] RewriteRule ^(。+)/ $ /index.php?section=$1 [L]' 這涉及尾部斜線問題,我將使用PHP來定義如果需要的話,默認區域。 – whizzkid 2011-12-22 01:18:55

0

當您嘗試「驗證」用戶的網址輸入時,這可能會變得非常難看。

從長遠來看,您可能希望將它們分開以使其更易維護,或者您希望添加更多曲折。

下面是一個例子:

#sunshine case 
RewriteRule ^(.+)/(.+)/(.+)$ /index.php?section=$1&area=$2&$3 

#if user enter /123/option=1, ie forgot 456 as the area 
RewriteRule ^(.+)/option=(.+)$ /index.php?section=$1&area=default&$2 

我不知道什麼是你用斜線問題,不會在URL成爲123/456option=1? 反正一些指南可以發現here

我的看法: 如果用戶想自己進入,而不是依靠你的網站提供的鏈接網址,停止重寫的URL,並給他們的404,我不會鼓勵用戶錯誤