.htaccess RewriteRule导致"文件未找到"

时间:2015-04-07 18:58:14

标签: php apache .htaccess mod-rewrite redirect

我的网站托管在子文件夹中:site.com/foo/

foo/文件夹的根目录中,我有以下.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule (.*) webroot/$1 [L]
</IfModule>

它的作用是将所有网页请求重定向到位于webroot/文件夹中的foo/子文件夹。 在webroot/子文件夹中,我有以下.htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index.php/$1 [L]

目标是将所有内容重定向到index.php。需要明确的是,文件结构为:

www/
  foo/
      .htaccess
      webroot/
         .htaccess
         index.php

当我尝试访问site.com/foo/时,我会按预期获得index.php,但当我尝试随机的内容时,例如:site.com/foo/bar/bar/bar,我得到&#34;找不到文件&#34; (那就是全部)但我希望index.php

仅在访问site.com/foo/时才有效的原因与第二个.htaccess无关,默认情况下它只是webroot/提供其包含的index.php。

注意:它在localhost中有效,localhost与我现在使用的服务器之间的主要区别可能是该网站位于ROOT {{1}但是现在在一个子文件夹中(localhost)。

注意2:如果我从foo/删除了/$1,它会工作,它将ALL重定向到index.php,但没有我需要的参数(index.php/$1在上面的示例中。 )

如何将所有请求重定向到带有参数的index.php?

2 个答案:

答案 0 :(得分:0)

尝试在.htaccess:

中添加RewriteBase

<强> /foo/.htaccess:

RewriteEngine On
RewriteBase /foo/

RewriteRule (.*) webroot/$1 [L]

<强> /foo/webroot/.htaccess:

RewriteEngine On
RewriteBase /foo/webroot/

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index.php/$1 [L]

答案 1 :(得分:-1)

QSA标志附加查询字符串 -

RewriteRule(。*)index.php?data = $ 1 [QSA]