2012-03-26 74 views
1

我是新來的php,新的mvc,新的yii和新的URL重寫。所以,我很抱歉,如果我問一些非常基本的東西。Yii基本地址重寫

我有隱藏的index.php(從警予的論壇中討論的htaccess的方法)

在我urlmanager,我有這個,

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

我有鑑於/站點文件夾的3個文件。

  1. '旅程',
  2. '邀請',
  3. 'LinkedIn'

現在,我的主頁應該重定向到 '征途' 行動(即應打開「網站/旅程.PHP「)

所以,我想,這將是

'/' => 'site/journey' 

它也可以。

現在,我想「之旅/邀請」應該調用「邀請」行動,即應該打開「網站/ invite.php」

而且,「征途/ LinkedIn」應該調用「LinkedIn」行動,即「網站/ linkedin.php」。

但是,

'journey/invite' => 'site/invite', 
'journey/linkedin' => 'site/linkedin' 

不工作。

此外,有人可以幫助我理解這一點,

<controller:\w+>/<id:\d+> 

即是什麼控制器URL又是什麼 'W +' 是什麼意思?

對指南的參考也有幫助。

bool.dev的建議後編輯:

改變了代碼,就像你說的(我試過前面過,去除所有的默認規則)。 現在我的網址經理很喜歡,

'/' => 'site/journey', 
    'journey/invite' => 'site/invite', 
    'journey/linkedin' => 'site/linkedin', 
    '<controller:\w+>/<id:\d+>'=>'view', 
    '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', 
    '<controller:\w+>/<action:\w+>'=>'<controller>/<action>', 

但它拋出一個錯誤

"Warning: require_once(): open_basedir restriction in effect. File(/var/xyz.com/../yii/framework/yii.php) is not within the allowed path(s): (/usr/share/php:/usr/share/pear:/usr/share/php/libzend-framework-php:/var/*/tmp:/var/xyz.com) in /var/xyz.com/journey.php on line 12 Warning: require_once(/var/xyz.com/../yii/framework/yii.php): failed to open stream: Operation not permitted in /var/xyz.com/journey.php on line 12 Fatal error: require_once(): Failed opening required '/var/xyz.com/../yii/framework/yii.php' (include_path='.:/usr/share/php:/usr/share/php/libzend-framework-php') in /var/xyz.com/journey.php on line 12'

當我做xyz.com/journey/invite甚至xyz.com/journey

編輯:

這是一個許可問題,@bool。開發的建議,把具體的規則之上的工作:)

+0

好吧,在你添加我的建議之前它沒有工作時發生了什麼?我的意思是它不工作的方式?你有沒有顯示任何錯誤? – 2012-03-26 20:26:02

+0

我也沒有工作。 它使用通常的語法,但在URL路由中引發錯誤。 我可以很容易地打開'xyz.com/site/journey'或'xyz.com/site/invite' 但是'xyz.com/journey'或'xyz.com/journey/invite'會拋出上面給出的錯誤。 – Jashwant 2012-03-26 20:33:59

+0

我的htaccess文件有這段代碼來隱藏index.php文件。 '選項+的FollowSymLinks IndexIgnore */* RewriteEngine敘述上 #如果目錄或文件是否存在,直接使用它 的RewriteCond%{} REQUEST_FILENAME!-f 的RewriteCond%{} REQUEST_FILENAME!-d #否則轉發給index.php RewriteRule。 index.php' – Jashwant 2012-03-26 20:40:18

回答

6

這兩個:

'journey/invite' => 'site/invite', 
'journey/linkedin' => 'site/linkedin' 

不工作,因爲網址是由以前的規則匹配:

'<controller:\w+>/<action:\w+>'=>'<controller>/<action>' 

爲了防止這種情況發生只是確保規則最後提到,在任何具體(即不匹配的正則表達式)重寫之前,所以你的規則可以看起來有點像這樣:

'journey/invite' => 'site/invite', 
'journey/linkedin' => 'site/linkedin', 
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>' 

這個:\w+意味着匹配任何字符串與任何「單詞」字符(a-z 0-9 _)和\d+中的一個或多個匹配項匹配的任何字符串與任何數字(0-9)中的一個或多個匹配項。退房php regex

編輯

之前徹底沒有看過你的問題,在規則中controller簡直是匹配的表達式的名稱,這樣你就可以有'<contr:\w+>/<act:\w+>'=>'<contr>/<act>'

EDIT2

的規則陣列讀你編輯的問題後,AFAIK你可以使用''=>'site/journey'代替'/'=>'site/journey'

+0

希望這可以幫助..如有需要澄清問題 – 2012-03-26 20:05:08

+0

在您的答覆後編輯我的問題。檢查它。 – Jashwant 2012-03-26 20:23:21

+0

我猜我的第二個編輯可以刪除open_basedir錯誤,不確定。無論如何,首先嚐試解決open_basedir錯誤,然後建議應該工作。 – 2012-03-26 21:19:53