在我的测试应用中,我正在尝试从网址中删除index.php
。我可以像http://localhost/trackstar/
而不是http://localhost/trackstar/index.php
那样访问根页面,但是当我尝试访问另一个页面时,如http://localhost/trackstar/project
或任何其他页面,我总是会在index.php
页面。但是,打开http://localhost/trackstar/index.php/project
会有效。
我正在使用WAMP服务器。配置如下。
启用了apache中的重写模块。
配置main
:
'urlManager' => array(
'urlFormat' => 'path',
'rules' => array(
'commentfeed' => array('comment/feed', 'urlSuffix' => '.xml', 'caseSensitive' => false),
'<controller:\w+>/<id:\d+>' => '<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
),
'showScriptName' => false,
),
项目的根文件夹中的 .htaccess
:
Options +FollowSymlinks
IndexIgnore */*
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
我还添加了httpd.conf
,虽然我认为并非真的有必要:
<Directory "c:/wamp/www/TrackStar/">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
allow from all
</Directory>
我在.htaccess
中尝试了多个额外参数的组合,但我一直被重定向到我的index.php
页面。
关于为什么这不起作用的任何想法?
修改
由于我被重定向,RewriteCond
中的检查不成功,换句话说,找不到REQUEST_FILENAME
作为目录或文件。也许在我的目录结构中有一些东西?
TrackStar\protected\views\project
目录,例如我正试图通过http://localhost/trackstar/project
访问的页面。我的Yii
框架文件位于www
文件夹上方的目录中。
答案 0 :(得分:1)
尝试在RewriteEngine on
之后添加.htaccess:
RewriteBase /trackstar/
问题在于:当找不到文件时,它会重定向到http://localhost/index.php
,在请求http://localhost/trackstar/index.php/project
文件index.php
中找到并且它可以正常工作
更新:
尝试修改您的urlManager设置(添加/trackstar/
):
'urlManager' => array( 'urlFormat' => 'path', 'rules' => array( 'commentfeed' => array('comment/feed', 'urlSuffix' => '.xml', 'caseSensitive' => false), '/trackstar/<controller:\w+>/<id:\d+>' => '<controller>/view', '/trackstar/<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>', '/trackstar/<controller:\w+>/<action:\w+>' => '<controller>/<action>', ), 'showScriptName' => false, ),
答案 1 :(得分:0)
你可以尝试:
项目根文件夹中的.htaccess:
Options +FollowSymlinks -MultiViews
IndexIgnore */*
DirectoryIndex index.php
RewriteEngine On
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^(.*?)index\.php$ /$1 [L,NC,R=302]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php [L]
答案 2 :(得分:0)
你可以通过两个简单的步骤来做到这一点。
配置config / main.php中的'urlManager'看起来像这样
'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName'=>false,
),
使用以下代码
在应用程序的根目录下添加.htaccess文件Options +FollowSymLinks IndexIgnore */* 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
多数民众赞成!
答案 3 :(得分:0)
更改你的config / 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>',
),
然后将你的htaccess文件放在带有受保护文件夹的基本目录下(可能在受保护的文件夹中),将代码放在你的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
或试试这个---
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\?*$ index.php/$1 [L,QSA]
完成...希望它能够运作