这个.htaccess和Yii urlManager设置有什么问题?

时间:2012-11-23 11:19:18

标签: .htaccess url-rewriting yii

我在子目录下有一个yii网站,例如

http://localhost/~username/maindirectory/yiiapp/

我的htaccess文件:

DirectoryIndex index.php index.html index.htm
Options +FollowSymLinks
IndexIgnore */*
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /yiiapp

# 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
</IfModule>

保护/配置/ main.php

...
'urlManager'=>array(
    'urlFormat'=>'path',
    'showScriptName'=>false,
....

问题:

让我说访问:

  • 第一步:http://localhost/~username/maindirectory/yiiapp/
  • 第二步:点击主页上的任意链接(默认yii app),让我们说About Us页面
  • 第三步: http://localhost/~username/maindirectory/yiiapp/site/page?view=about
  • 第四步:点击链接上的任意内容(让我们说同一页面)
  • 网址将如下所示: http://localhost/yiiapp/site/page?view=about

所以:所有链接都可以访问:http://localhost/yiiapp/....,而不是从链接中删除index.php,而字符串b / w localhost和基目录被删除。

我已经尝试this并且需要在localhost上使用相同类型的网址,显然不使用子网域

请帮我解决这个问题。

3 个答案:

答案 0 :(得分:0)

部分答案:

问题是您要重定向到同一域上的绝对URL 该URL可能看起来像/yiiapp/site/page?view=about。然而,这会导致http://localhost/yiiapp/site/page?view=about。您必须在相对于域的前面添加网站目录(不确定我是否正确表达)。

例如,a href标记中的网址应该与/~username/maindirectory/yiiapp/site/page?view=about类似,因此您必须在某处添加/~username/maindirectory部分。

答案 1 :(得分:0)

尝试过:

'urlManager'=>array(
    ....
    'baseUrl' => '/~username/maindirectory/yiiapp',
    ....

http://www.yiiframework.com/doc/api/1.1/CUrlManager#setBaseUrl-detail

答案 2 :(得分:0)

所以.htaccess中的RewriteBase /~username/maindir/yiiapp修复了问题,而不是  config / main.php中的'baseUrl' => '/~username/maindirectory/yiiapp'事物

这是完整的.htaccess文件:

DirectoryIndex index.php index.html index.htm
Options +FollowSymLinks
IndexIgnore */*
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /~username/maindir/yiiapp

# 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
</IfModule>