htaccess将所有用户转发到单个文件

时间:2015-09-17 07:23:10

标签: php apache .htaccess

美好的一天,

我使用的框架使用.htaccess文件将所有请求转发到子文件 core / index.php

我使用了以下.htaccess文件代码:

<IfModule mod_rewrite.c>
    RewriteEngine           on
    RewriteRule             ^$    core/    [L]

    # If the request is not for a valid directory
    RewriteCond %{REQUEST_FILENAME} !-d
    # If the request is not for a valid file
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule    (.*) core/$1    [L]
 </IfModule>

我觉得这很好用,直到我注意到这些页面被多次加载。 这就是我想要阻止的。

所以我看了一下这个论坛。 我找到了一个解决方案,(。*)核心之间的空间可能就是原因。

因此我删除了它。

令我高兴的是,多个数据库插入已停止。 但是现在我发现我的请求没有正确转发。 只有主要请求(www.myapplication.com /)才能正确转发(index.php)

每当我添加类似:(www.myapplication.com/admin)之类的东西时,他就会发现错误,无法找到该页面。

我希望有人能告诉我在这段代码中要修改的内容:

RewriteEngine           on
RewriteRule             ^$    core/    [L]

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

提前致谢!!

我还注意到每当我将(。)核心/ $ 1 [L] 行更改为(。 )core / $ 1 [L] 不仅我的(子)页面停止工作,而且index.php我的index.php文件的加载时间被分成两半。 因此,我的页面真正重新加载了多次。

修改 正如下面的问题所指出的,系统还在/ core目录中使用.htaccess文件。

此文件包含以下内容

    <IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    # Rewrite all other URLs to index.php/URL
    RewriteRule ^(.*)$ index.php?url=$1 [PT,L]


    </IfModule>
    <IfModule !mod_rewrite.c>
        ErrorDocument 404 index.php
    </IfModule>
  

修改

     

我认为做一个小小的总结会很方便。如果请求文件或路径,我希望服务器检查它是否是   在服务器上可用。       www.myapplication.com/flower.jpeg和服务器可以找到它应该显示flower.jpeg文件。       如果服务器找不到flower.jpeg文件,我希望服务器将请求转发到/core/index.php?url=flower.jpeg

I am using two .htaccess files
in the **public directory** (main directory)

<IfModule mod_rewrite.c>
    RewriteEngine           on
    RewriteRule             ^$    core/    [L]

    # If the request is not for a valid directory
    RewriteCond %{REQUEST_FILENAME} !-d
    # If the request is not for a valid file
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule (.*) core/$1    [L]
  RewriteCond %{REQUEST_URI} !core/
 </IfModule>
     

核心目录中的第二个文件   的芯/

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Rewrite all other URLs to index.php/URL
RewriteRule ^(.*)$ index.php?url=$1 [PT,L]


</IfModule>
<IfModule !mod_rewrite.c>
  ErrorDocument 404 index.php
</IfModule>
     

问题:我的页面处于循环中,因此页面index.php得到了每个服务器请求的执行。例如。页面上的10个图像表示10   要求额外的。对于js和CSS文件也是如此。

编辑:

  

解决了!!!

     

这是解决方案!!       DirectoryIndex core / index.php

<IfModule mod_rewrite.c>
  RewriteEngine on

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ core/index.php?url=$1 [QSA,L]
 </IfModule>

3 个答案:

答案 0 :(得分:0)

你必须添加

RewriteCond %{REQUEST_URI} !core/

到RewriteCond块以防止从目标 重定向到目标

如果您的目标更具体,那会更好,例如,如果您可以指定/core/而不是core/(您是否在每个文件夹中都有核心子文件夹?)。此外,您还必须排除图像文件夹。

答案 1 :(得分:0)

/core/.htaccess

中试试
ErrorDocument 404 default
DirectoryIndex index.php

RewriteEngine On

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

答案 2 :(得分:0)

  

我找到了解决方案。工作代码是:

DirectoryIndex core/index.php

<IfModule mod_rewrite.c>
  RewriteEngine on

  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ core/index.php?url=$1 [QSA,L]
 </IfModule>