0

我想让一个特定的文件夹被视为一个实际的文件夹,而不是作为 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,我将无法访问内页上的会话变量。

希望你能理解。

4

2 回答 2

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] 
于 2013-10-02T14:33:56.363 回答
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/)
于 2013-10-02T08:43:47.447 回答