2013-06-13 138 views
4

如何隱藏URL GET參數(http://domain.com/MyFirstYii/page?view=about)。我搜索了很多帖子。他們都在說重寫和URL管理器,但我無法實現我想要的。 :(從URL隱藏GET參數

我的情況是,

我只是想隱藏URL GET參數

例如:。

http://domain.com/MyFirstYii/page***?view=about*** 

我想躲***?view=about***

那麼URL應該看起來像這樣http://domain.com/MyFirstYii/page。像這樣的其他頁面http://domain.com/MyFirstYii/post。簡單地說,我的GET參數應該像POST參數RS。

在此先感謝。

編輯:

我想創建的URLManager一些規則,但什麼樣的規則將隱藏GET參數。

+0

什麼是隻使用'POST'取代'問題GET'? – enenen

+1

這沒有任何意義。網址是網址; HTTP請求中不包含其他用戶控制的數據。考慮使用URL重寫。 – SLaks

+0

我也想在'href'中使用。那裏我不能使用POST? –

回答

2

\ W在正則表達式的意思是「單詞」字符,而像「我的優先頁」這樣的URL部分不匹配。 要隱藏GET參數,您必須改進您的urlManager規則。當你輸入網址

http://example.com/page/12/my-prety-title 

頁面控制器將被要求通過ID和標題作爲參數進行視圖操作

'<controller:\w+>/<id:\d+>/<title:[^\/]*>/*' => '<controller>/view' 

在這種情況下:你可以寫使用SEF網址的網頁這樣的規則。

http://example.com/page/view?id=12&title=my-prety-title 

最後一部分/*在規則允許保留更多的PARAMS:如果你進入這個網址,卻是一樣的。例如。如果你的地址是

http://example.com/user/55/john-doe-junior/foo/bar/ 
UserControlleractionView

你可以寫

echo '<pre>' ; 
print_r($_GET); 
echo '</pre>' ; 
die(); 

,你會看到

Array 
(
    [id] => 55 
    [title] => john-doe-junior 
    [foo] => bar 
) 
0

取消註釋這些行從main.php

 
'urlManager'=>array(
         'urlFormat'=>'path', 
         'showScriptName'=>false, 
         'rules'=>array(
           'MyFirstYii/post/<view>'=>'MyFirstYii/post', 
           '<controller:\w+>/<id:\d+>'=>'<controller>/view', 
           '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', 
           '<controller:\w+>/<action:\w+>'=>'<controller>/<action>', 
         ), 
       ), 

,放在項目的根目錄下的.htaccess文件,並寫入下面的代碼

 
RewriteEngine on 

# if a directory or a file exists, use it directly 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 

# otherwise forward it to index.php 
RewriteRule . index.php 
+0

這些都是基本的重寫選項,我已經取消註釋這些東西了。即使它顯示'網站/頁面?查看=約'URL –

+0

這隻改變url格式並隱藏index.php參數 –

+0

是的,我想隱藏'?view = about'。 :( –

-3

如果您打算使用GET和需要這些參數,你不能隱藏它,因爲這是GET的工作方式。如果您確實需要隱藏參數,則必須切換到POST,因爲參數將傳遞到請求負載中而不是在url中。

+0

他說他是動態地將url的錨定標籤。這裏沒有post方法和get方法的工作原理 – saikiran

-3

使用post方法而不是get ....這是最好的和有效的解決方案。

跟進您的查詢看看這個網站:

[http://pure-essence.net/2007/06/29/simple-php-path-rewrite/]

+0

使用'GET'方法比'POST'快。因此,'POST'不是一個有效的解決方案。 「POST」的主要優點是可以在傳輸過程中隱藏敏感信息,並且可以幫助傳輸大量數據。 – Kevin

+0

夥計,請停下來。沒有什麼可以在這裏發佈......我不能相信每個人都在談論使用POST而不是GET。它沒有任何意義! – MrSoundless

+1

@MrSoundless OP的問題(在編輯之前)是關於「隱藏URL」。 (請參閱編輯歷史http://stackoverflow.com/posts/17086732/revisions)。那麼,現在應該對你有意義! – Kevin

0

添加這個URL規則的您的網址規則的頂部:

'page/<view:\w>' => 'user/page' 

我假設在未來:

  • 控制器名稱:UserController的
  • 動作名稱:actionPage

如果我的假設是錯誤的,請提供正確的控制器名稱和動作名稱,這樣我就可以解決問題的答案。

UPDATE: 固定控制器名稱基於評論

UPDATE2:

如果您希望這對您的控制器的所有操作工作,使用:

'<action:\w>/<view:\w>' => 'user/<action>' 
+0

我的控制器是'UserController',動作名稱是'page' –

+0

也爲你改變:) – MrSoundless

+0

還添加了第二個規則,你可以使用,而不是第一個,根據你的需要。讓我知道它是如何工作的,因爲我無法在這裏測試它。 – MrSoundless