-1

我正在尝试了解 mod_rewrite。

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    #Removes access to the system folder by users.
    #Additionally this will allow you to create a System.php controller,
    #previously this would not have been possible.
    #'system' can be replaced if you have renamed your system folder.
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /indexl.php?/$1 [L]

    #When your application folder isn't in the system folder
    #This snippet prevents user access to the application folder
    #Submitted by: Fabdrol
    #Rename 'application' to your applications folder name.
    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ /indexl.php?/$1 [L]

    #Checks to see if the user is attempting to access a valid file,
    #such as an image or css document, if this isn't true it sends the
    #request to index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ indexl.php?/$1 [L]

    </IfModule> 

这是我在 CI 中的 .htacces 文件的内容。我使用这个文件是因为它可能适用于其他一些应用程序。但是,如果我更改 index.php 的名称,这将不起作用,我会在浏览器中获得目录结构。所以我想知道即使文件名是index.php它是否也能正常工作,还是会自动使用index.php。这不应该

RewriteRule ^(.*)$ indexl.php?/$1 [L]

将每个请求重定向到 indexl.php???

4

2 回答 2

2

RewriteRule 片段根据给定的 URL 路径重定向。如果您使用 指定一个空的http://example.com/,则-fand-d检查不会失败。因此不会重写所述indexl.php脚本。

并且在没有任何index.*文件(无论是 .php 还是 .html)的情况下,Apaches 自动索引(目录列表)将接管。

但是,您可以使用:

DirectoryIndex indexl.php

因此,如果路径为空,您的索引脚本仍将运行。

于 2013-01-29T17:39:30.277 回答
1

我建议您查看Code Igniter 用户指南。你会看到的:

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

这是 Code Igniter 用户使用的非常典型的重写。因此,如果您将其添加到应用程序目录根目录中的 .htaccess 文件中,您可以拥有如下网址:

example.com/my/page

而不是

example.com/index.php/my/page
于 2013-01-29T17:41:16.577 回答