2012-04-20 25 views
0

讓我們先從一個例子:如何獲得URL字符串到PHP變量

所以請求的URL將是:www.domain.com/product/hdd/samsung

我想有一個重寫規則獲取index.php並將www.domain.com後的所有內容保存爲php變量。所以,替代頁面將是例如www.domain.com/index.php?query=product/hdd/samsung。但是我無法寫出正確的規則。

我嘗試這樣做:

RewriteRule ^/(.*)$ index.php?query=$1 [NC,L] 

上面的代碼無法正常工作。我想使用PHP代碼查詢在index.php:

if(isset($_GET["query"])) { 
    $query=$_GET["query"]; 
} 

我找出來,有可能獲得通過$_SERVER['QUERY_STRING']代替mod_rewrite$query,對嗎?

對於我的PHP應用程序變量$query至關重要,因爲它用於加載模板。

問題: 什麼解決方案,你會重提我嗎?要使用$_SERVER變量還是mod_rewrite? 如果mod_rewrite,如何正確寫入RewriteRule

謝謝

+0

該規則對我來說看起來很好。你可以測試一些更簡單的規則來驗證重寫規則模塊是否被正確應用和運行? – mellamokb 2012-04-20 23:36:05

+0

確保你有'RewriteEngine on'的地方。 – jli 2012-04-20 23:36:35

+0

重寫引擎工作正常(它是)。如果我使用上面的規則,我會得到404錯誤。我正在本地主機上測試它(wamp服務器)。 – 2012-04-20 23:47:47

回答

1

試試這個:

RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php?query=$1 [NC,L] 

如果您的網站是不是在你的服務器的根目錄,改變RewriteBase/some/subdir/

+1

我剛剛編輯它,這應該做的伎倆。 – lafor 2012-04-20 23:53:33

+0

非常感謝!是的,它的工作!但它會刪除參數,例如www.domain.com/a/b/c?sort=price。 (我得到了index.php?query = a/b/c)。我需要以某種方式存儲整個字符串(排序=價格)。最好的解決方案是獲取index.php?query = a/b/c&sort = price。我其實只需要一個參數(排序)。它甚至有可能嗎? – 2012-04-21 00:03:58

+1

我很確定我做錯了什麼,因爲我無法使用重寫規則得到'sort = price'。這就像它從來沒有存在過。 所以我想直接用php解析這個部分。使用lafor的代碼,您請求正確的php文件,並在該文件中,您使用此代碼獲得排序部分:http://pastebin.com/vLMNSCyK。我希望它有幫助。 – 2012-04-21 00:42:55