2013-10-27 58 views
1

我參與了yii webapp中的url seo。我無法達到預期的效果。Yii seo url重寫urlManager和.htaccess

首先,該網站是多語言。我創建了一個語言切換器,我在URL中傳遞「lang」參數作爲GET值。

以後,我就跟着這個網址維基:

http://www.yiiframework.com/wiki/294/seo-conform-multilingual-urls-language-selector-widget-i18n/

  • 步驟1)我已經創建urlManager類
  • 步驟2)編輯我的控制器
  • 第5步)編輯我的配置文件

對於第5步,我使用了以下代碼:

'urlManager' => array(
     'class' => 'application.components.UrlManager', 
     'urlFormat' => 'path', 
     'showScriptName' => false, 
     'urlSuffix'=>"/", 
     'rules' => array(          
      '<lang:(de|it|en|fr|es)>'=>'',         
      '<lang:(de|it|en|fr|es)>'=>'site/index',         
      '<lang:(de|it|en|fr|es)>/<action:(!index)>/*' => 'site/<action>',     
      '<lang:(de|it|en|fr|es)>/<controller:\w+>/<id:\d+>' => '<controller>/view', 
      '<lang:(de|it|en|fr|es)>/<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>', 
      '<lang:(de|it|en|fr|es)>/<controller:\w+>/<action:\w+>/*' => '<controller>/<action>', 


     ), 
    ),  

而我的.htaccess是一樣的警予默認的.htaccess

<Files .htaccess> 
    order allow,deny 
    deny from all 
</Files> 
Options All -Indexes 

我什麼也沒有改變。

現在,我已經嘗試了urlManager的不同規則,並嘗試將其他規則添加到htacces中,但沒有成功。

我的問題是,一些頁面中斷與404錯誤,資源,如圖像或腳本相同的事情。如果我從元素檢查器檢查資源請求的url,我看到請求的URL被重寫爲該網站的URL(是否正確的行爲?) 我也試圖把整個項目放在根子文件夾下,以創建一個與生產不同的測試環境,由於子文件夾,結果更糟。 此外,如果我點擊家庭鏈接,系統重定向我到www.mysite.com/lang/en

此外,我已經添加了一種行爲,檢索語言基於ip或靜態設置一個,所以在請求處理結束後,我總是有一個語言代碼作爲get參數。

器(get語言URL參數被稱爲 「郎」)

我需要的是:

  • 如果有人訪問主網址 - www.mysite.com - 我需要添加語言在網址,所以我可以有不同的網址基於這種方式的語言:www.mysite.com/it/,www.mysite.com/en/等等

  • 與上述相同的url創建像這個Yii :: app() - > createUrl('')

  • 如果有人訪問www.mysite.com/index.php?r=site/index與上面相同並刪除index.php

  • 刪除索引。PHP和網站在所有情況

  • 任何種類的URL總是以/字符結尾(也避免了重複的內容,爲了這個,我已經添加了「urlSuffix」 =>「/」)

  • 爲其他控制器我需要刪除視圖操作(但是保留另一個) - 以及何時以這種方式將「id」作爲url的一部分:

    [www.mysite.com/controller/action/id/1?here -other-get-params]或

    [www.mysite.com/controller/id/1?other-params] - >當動作是查看時

請問,有人可以提供我要做的一步一步的過程? 謝謝

問候, 弗朗切斯科

回答

1

您是否嘗試過結尾的斜線在.htaccess添加到index.php文件和你設置RewriteBase?

隨着XAMPP在Windows 8上使用Apache/2.4.3(Win32的)的OpenSSL/1.0.1c PHP/5.4.7下面應該工作:

的.htaccess

RewriteEngine on 
#LOCAL 
RewriteBase /myDir/subDir/ 

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

RewriteCond %{REQUEST_URI} !=/favicon.ico 
# otherwise forward it to index.php 
RewriteRule . /index.php 

AddDefaultCharset utf-8 

而且在配置/ main.php

'urlManager' => array(
      'class' => 'application.components.UrlManager', // which refers to UrlManager.php 
      'urlFormat' => 'path', 
      'showScriptName' => false, 
      'rules' => array(
       'login' => 'site/login', 
       '<language:(de|en|fr|es)>/' => 'content/index', 
       '<language:(de|en|fr|es)>/<action:(contact|login|logout)>/*' => 'site/<action>', 
       '<language:(de|en|fr|es)>/<controller:\w+>/<id:\d+>' => '<controller>/view', 
       '<language:(de|en|fr|es)>/<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>', 
       '<language:(de|en|fr|es)>/<controller:\w+>/<action:\w+>/*' => '<controller>/<action>', 
       '<language:(de|en|fr|es)>/<module:\w+>/<controller:\w+>/<action:\w+>/*' => '<module>/<controller>/<action>', 
      ), 
     ), 

和/protected/components/UrlManager.php

<?php 
class UrlManager extends CUrlManager 
{ 
    public function createUrl($route,$params=array(),$ampersand='&') 
    { 
     if (!isset($params['language'])) { 
      if (Yii::app()->user->hasState('language')) 
       Yii::app()->language = Yii::app()->user->getState('language'); 
      else if(isset(Yii::app()->request->cookies['language'])) 
       Yii::app()->language = Yii::app()->request->cookies['language']->value; 
      $params['language']=Yii::app()->language; 
     } 
     return parent::createUrl($route, $params, $ampersand); 
    } 
} 

,並在httpd.conf

<Directory "C:/Users/someuser/htdocs"> 
Options Indexes FollowSymLinks MultiViews Includes ExecCGI 
AllowOverride All 
Order Allow,Deny 
Allow from all 
Require all granted 
</Directory> 
+0

你好,感謝您的回覆,但您的規則,我還沒有達到我的目標。另外,網站/索引路由在www.mysite.com/lang/en(我不想lang)中進行了轉換,導致404錯誤,但未找到lang控制器,但lang是參數,而不是控制器 – user2548436