我想将特定文件夹视为实际文件夹,而不是作为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我无法访问内页的会话变量。
希望你能理解。
答案 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]