0

我正在尝试使用 Apache 的 mod_rewrite 模块从 Yii 应用程序动态生成的 url,该应用程序始终包含 index.php 作为路由器/引导程序,通过 .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>  

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

我查看了以下指南和 SO 问题:URL 重写指南mod_rewrite 文档SO:调试 .htaccess 重写规则的提示,但没有一个明确说明我在寻找什么。另外,我的 apache 错误日志没有报告任何关于 .htaccess 文件的信息。对于正确使用的任何帮助或指导将不胜感激。

4

2 回答 2

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

于 2013-09-27T06:05:05.410 回答
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
于 2013-09-27T19:43:13.553 回答