我正在尝试使用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 Guide,mod_rewrite documentation和SO: Tips for debugging .htaccess rewrite rules,但没有一个明确地说明了我在寻找什么。此外,我的apache错误日志没有报告任何有关.htaccess文件的内容。任何有关正确使用的帮助或指导都将不胜感激。
答案 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