.htaccess mod_rewrite与Yii生成的url动态匹配

时间:2013-09-26 15:45:58

标签: apache .htaccess mod-rewrite yii

我正在尝试使用Apache的mod_rewrite模块从Yii应用程序生成动态生成的URL,该应用程序始终包含index.php作为路由器/ bootstrap,通过.htaccess可用于浏览Web浏览器的静态URL。

示例:localhost/projectname/index.php/commentfeed.xml是动态生成的页面,但我希望能够通过localhost/projectname/commentfeed.xml

访问它

我运行的Apache版本是: Apache / 2.4.4(Win32)OpenSSL / 1.0.1e PHP / 5.5.0 ,通过XAMPP为我的开发平台。 mod_rewrite模块存在并加载到Apache的httpd.conf文件中。

我在localhost / projectname /中的.htaccess如下:

#Turning on the rewrite engine is necessary for the following rules and features.
#FollowSymLinks must be enabled for this to work.
<IfModule mod_rewrite.so>
    Options +FollowSymlinks
    RewriteEngine On

#Unless an explicit file or directory exists,
#redirect all request to Yii entry script.

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . index.php [L]
</IfModule>  

现在,当我尝试通过浏览器访问commentfeed.xml而没有index.php(localhost / projectname / commentfeed.xml)时,我收到404错误 - 找不到对象!

我查看了以下指南&amp;所以问题:URL Rewriting Guidemod_rewrite documentationSO: Tips for debugging .htaccess rewrite rules,但没有一个明确地说明了我在寻找什么。此外,我的apache错误日志没有报告任何有关.htaccess文件的内容。任何有关正确使用的帮助或指导都将不胜感激。

2 个答案:

答案 0 :(得分:1)

您需要告诉Yii UrlManager不需要脚本名称。在config / main.php文件中,您应该:

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

确保您还定义了一个路由,以指定生成commentfeed.xml文件的控制器/操作。

更多信息:http://www.yiiframework.com/doc/guide/1.1/en/topics.url#hiding-x-23x

答案 1 :(得分:0)

我的问题的具体答案在于使用<IfModule> ... </IfModule>。随着我的XAMPP v3.2.1的设置和随之安装的apache服务器,我在.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