3

问题

最初的问题: 您好我有一个新创建的 Yii 站点,我想从 URL 中删除 index.php。
示例:“/index.php/site/index”应该是“/site/index”

我一直在使用这个http://www.yiiframework.com/doc/guide/1.1/en/topics.url#hiding-x-23x指南,但我只收到 404。

我希望你能指出错误或帮助我调试这个问题!
如果我遗漏了任何相关信息,请告诉我。

OBS:“主页”按预期工作,其他页面已损坏。

问题状态: 似乎是 mod_rewrite.so 的 apache/ubuntu 问题

回答

在不同人的帮助下,现在一切正常:DI 必须安装“rewrit”才能运行,我通过编写 Running a2enmod rewrit 来做到这一点 我系统的以下配置为我解决了这个问题,我希望这个线程可以帮助其他人类似的问题。

我的系统

Server version: Apache/2.2.22 (Ubuntu)  
Server built:   Nov  8 2012 21:37:45

Apache httpd.conf

<Directory "/var/www/MY_SITE/FOLDER_CONTAINING_YII/">
AllowOverride All
#...
</Directory>
LoadModule rewrite_module modules/mod_rewrite.so

这是文件的全部内容

Apache 错误日志

File does not exist: /.../htdocs/site, referer: http://.../htdocs/index.php/site/index  

我加了点

重启阿帕奇

kah@webaalborg:/etc/apache2/sites-available$ sudo service apache2 restart
 * Restarting web server apache2 
[Mon Nov 26 20:16:35 2012] [warn] module rewrite_module is already loaded, skipping
  ... waiting 
[Mon Nov 26 20:16:36 2012] [warn] module rewrite_module is already loaded, skipping
                                                                          [ OK ]

/ect/apache2/av​​ailable-sites/default

...
DocumentRoot /var/www
    <Directory />
            Options FollowSymLinks
            AllowOverride None
    </Directory>
    <Directory /var/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    </Directory>
    <Directory /var/www/MY_SITE>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride all
            Order allow,deny
            allow from all
     </Directory>
...

Yii 目录结构:

  • 框架
  • 文档
    • 资产
    • css
    • .htaccess
    • 索引.php
    • 索引-test.php
    • 主题
  • 受保护

.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

main.php 配置文件

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

4 回答 4

5

如果你在 Linux(比如 ubuntu)上工作,那么转到那里的路径/etc/apache2/sites-available/,你会发现一个名为的文件default

    <Directory /var/www/> <--- ***root directory***
    Options Indexes FollowSymLinks MultiViews
    AllowOverride all <---- ***change this line***
    Order allow,deny
    allow from all
    </Directory>

我认为你的问题会解决。

谢谢。

于 2012-11-26T05:42:46.070 回答
1

AllowOverride在你的目录指令中吗?

<Directory "/your/path">
AllowOverride All
#...
</Directory>

如果不是,这将解释为什么您的重写规则不起作用。

于 2012-11-24T15:34:37.453 回答
0

尝试将其放入 .htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

并且还从 httpd.conf 中删除行 'LoadModule rewrite_module modules/mod_rewrite.so' 并从命令行启用重写模块,执行 a2enmod 重写。

于 2012-11-24T15:27:30.140 回答
0
<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride all <---- ***change this line***
    Order allow,deny  <---- ***change this line***
    allow from all
    Require all granted
</Directory>
于 2015-02-17T06:36:30.410 回答