2011-04-14 86 views
0

我試圖顯示我的獲取變量作爲平面鏈接。 想從這個改變:Mod_rewrite平面鏈接

http://mydomain.com/index.php?page=shop&var1=hat&var2=10 

http://mydomain.com/index.php/shop/hat/10 

請記住,沒有變量固定數量的,這就是爲什麼我用VAR1,VAR2,...等

[編輯] 我已經有部分工作腳本,但只有最大工作3個變量

RewriteCond %{ENV:REDIRECT_STATUS} 200 
RewriteRule .* - [L] 
RewriteRule ^([^/\.]+)/?$ index.php?page=$1 [L] 
RewriteRule ^([^/\.]+)/?([^/\.]+)/?$ index.php?page=$1&var=$2 [L] 
RewriteRule ^([^/\.]+)/?([^/\.]+)/?([^/\.]+)/?$ index.php?page=$1&var=$2&var2=$3 [L] 
RewriteRule ^([^/\.]+)/?([^/\.]+)/?([^/\.]+)/?$ index.php?page=$1&var=$2&var2=$3&var3=$4 [L] 

回答

2

所以首先要記住的mod_rewrite是這樣工作的:

http://mydomain.com/index.php/shop/hat/10 

(什麼客戶端類型)改寫

http://mydomain.com/index.php?page=shop&var1=hat&var2=10 

(什麼客戶供應),但不一定像顯示後者。 (除非你把它重定向)

所以假設你的格式完全地描述如下:

RewriteRule ^index\.php/([^/]+)/([^/]+)/([0-9]+)$ /index.php?page=$1&var2=$2&var2=$3 

應該不錯。

編輯:

哦BTW!我沒有考慮可變數量的變量。我認爲這不應該由mod_rewrite處理。也許最好的拍攝是RewriteRule index.php/(.*) /index.php?call=$1,然後使用你的腳本使用/分隔符來爆炸。

如果您已經知道變量AFAIK的數量,您只能這樣做。

+0

感謝您的幫助。你的腳本看起來不錯,看起來應該可以工作,但它給了我「未找到對象」。也許我錯過了一些東西,這裏是我的代碼實現 RewriteEngine on RewriteRule^index \ .php /([^ /] +)/([^ /] +)/([0 -9] +)$ /index.php?page=$1&var2=$2&var2=$3 。該網站處於測試模式,不在域的根目錄 – razvan 2011-04-14 09:41:31

+0

啊!我的規則只適用於你的index.php在根目錄下。您是否嘗試在index.php之前添加目錄鏈接? – 2011-04-14 09:50:02

+0

這樣工作就像你在第二個解決方案^(。*)?$ index.php?page = $ 1 [L] .Didn't與index.php或與目錄一起工作。這對我來說已經夠好了。謝謝您的幫助!! – razvan 2011-04-14 10:19:03

0

您可以直接將所有請求直接指向index.php(稱爲bootstrapping),並讓腳本解析出變量。

這是如何完成與Zend Framework,你應該看看它。採埃孚也有其他一些好東西可以利用。

這是我的一個使用ZF支持的網站的虛擬主機的重寫塊。

RewriteCond %{REQUEST_FILENAME} !-l 
    RewriteCond %{REQUEST_FILENAME} !-s 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteCond %{REQUEST_URI}  !^/favicon.ico 
    RewriteRule ^.*$ index.php [NC,L]