2012-04-12 42 views
1

我想從我的域中刪除PHP獲取查詢。例如,我並不想顯示example.com/?url=1234,而是將其重寫爲example.com/1234,隱藏查詢但不刪除它。我知道這是可能的,並閱讀了很多關於如何做到這一點的教程,但我的代碼只是不起作用。下面是我目前想:國防部重寫幫助 - 隱藏PHP獲取查詢

RewriteEngine On 
RewriteCond %{QUERY_STRING} url= 
RewriteRule (.*) http://example.com/$1? [R=301] 

這是什麼東西做的是完全剝離的查詢,而不是僅僅移除?url=段。

回答

0

您正在考慮它的南轅北轍。重寫不是客戶看到的東西,而是服務器專有的東西。

這意味着您可以使example.com/1234工作,就好像客戶端使用了example.com?url=1234一樣。

要做到這一點,你可以使用以下行:

RewriteEngine On 
RewriteRule (.*) http://example.com/url=$1 [QSA] 
+0

這恐怕不行。 – 2012-04-12 09:15:17

+0

看看我編輯的評論。我想我可能誤解了你:) – LasseValentini 2012-04-13 06:23:46

0

你需要提取的RewriteCond行的查詢字符串的相關部分。

RewriteEngine On 
RewriteCond %{QUERY_STRING} url=(.*)(&|$) 
RewriteRule (.*) http://example.com/$1%1? [R=301] 

以上將放棄您給出的任何其他查詢字符串參數(請參閱下面的示例)。 它也將保留文件名,如果給出。

例子:

http://example.com/?url=1234  ----> http://example.com/1234 
http://example.com/a/?url=1234  ----> http://example.com/a/1234 
http://example.com/?url=1234&a=b ----> http://example.com/1234 
+0

我已經嘗試了這一行的線,但我得到一個404錯誤? – 2012-04-12 09:15:00

+0

這是重寫,首先進入一個重定向循環,在URL中添加一噸&,然後拋出404錯誤。 – 2012-04-12 09:17:17

+0

(示例)文件夾「1234」是否存在?如果不是,那麼它當然會拋出404錯誤。你是否仍然要求索引文件(例如'index.php')?如果是這樣,那麼這不是你問的。我建議就此提出另一個問題。 – diolemo 2012-04-12 09:21:57