将特定文件夹视为实际文件夹而不是控制器CodeIgniter

时间:2013-10-02 06:03:37

标签: apache .htaccess codeigniter mod-rewrite

我想将特定文件夹视为实际文件夹,而不是作为codeigniter中的控制器,并且还希望将我的所有domain.com请求重定向到www.domain.com。我有以下htaccess代码:

<IfModule mod_rewrite.c>
RewriteEngine On

RewriteCond $1 !^(FOLDER_TO_BE_EXCLUDED)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# Redirect non-www to www:
#RewriteCond %{HTTP_HOST} !^www\. [NC]
#RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

# 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重定向到www),则所有请求都被视为控制器 所以文件夹(FOLDER_TO_BE_EXCLUDED)也被视为控制器。我想以实际的方式访问此文件夹。

如果我不将非www重定向到www我无法访问内页的会话变量。

希望你能理解。

2 个答案:

答案 0 :(得分:1)

尝试将RewriteCond添加到您的上一个RewriteRule:

RewriteCond $1 !^(folder_name/)
RewriteRule ^(.*)$ index.php?url=$1 [PT,L] 

这应该会阻止它将www.yourdomain.com/folder_name重定向到index.php。

您可以使用|字符为条件添加更多文件夹:

RewriteCond $1 !^(folder_name/|another_folder/)

答案 1 :(得分:1)

RewriteCond仅适用于以下的RewriteRule:您的规则(现在注释)不正确。

此外,IMO是定义此类异常的最简单方法,是使用非重写规则,如:RewriteRule ^FOLDER_TO_BE_EXCLUDED/ - [L](在重写规则的“顶部”)

RewriteEngine On

# Redirect non-www to www:
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* http://www.%{HTTP_HOST}/$0 [R=permanent,L]

RewriteRule ^FOLDER_TO_BE_EXCLUDED/ - [L]

# Rewrite all other URLs to index.php/URL
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php?url=$0 [PT,L]