2013-10-27 128 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