二级.htaccess无法正常工作

时间:2015-02-17 19:57:45

标签: php apache .htaccess mod-rewrite redirect

我以前在我的项目中有两个.htaccess文件,我们有以下目录。

 MainProject/
      .htaccess        //first .htaccess
      public/
         .htaccess     //second .htaccess

以前的项目工作正常,但是一旦我卸载并安装了apache,一切都会改变。

这是.htaccess 1:

RewriteEngine On
RewriteRule ^$ public/     [L]
RewriteRule (.*) public/$1 [L]

而且,这是.htaccess 2:

RewriteEngine On
RewriteCond %{REQUEST_URI} !/public/* [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [L,QSA]

我激活了mod_rewrite模块。

如果我在地址栏中写道:

  

http://myproject.lan/

它带我到主页,这意味着.htaccess 1正常工作。

但是当我写下这样的话时:

  

http://myproject.lan/login

它不起作用,它显示找不到的页面"消息。

项目工作时会发生什么,是/ login = $ 1,因此,它查找公共/登录(在.htaccess 1中)

然后,在公共目录中,服务器执行第二个.htaccess,其中$ 1与/index.php?url=/login匹配,最终发送到前端控制器,等待处理并转换为现有路由

如果我需要在Apache上启用某些功能,请告诉我,因为我忘记了之前我是如何设法让它工作的。

谢谢

2 个答案:

答案 0 :(得分:1)

您的/public/.htaccess应该是这样的:

DirectoryIndex index.php
RewriteEngine On
RewriteBase /public/

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?url=$1 [L,QSA]

问题是此.htaccess中存在RewriteCond %{REQUEST_URI} !/public/* [NC]条件

答案 1 :(得分:0)

我刚刚找到了问题的解决方案,问题在于我的

  

的httpd-vhosts.conf

我忘了将/public添加到DocumentRoot。

谢谢