Apache Mod_Rewrite条件(跳过目录)不起作用?

时间:2016-01-12 20:10:17

标签: apache .htaccess mod-rewrite

所以我有:

- 一些mod_rewrite规则,包括删除www。,强制https和SEO

- 一个名为stage的目录,我希望这些规则不适用于

显然,我在这里发帖,条件没有被应用或满足,我不明白为什么:(

警告,我手动和自动(使用cPanel)管理我的.htaccess,所以它非常混乱,我提前真诚地道歉。如果有人能指出冗余(我想我可能会看到一个,但我不确定),我将非常感激。

我感谢任何人都可以提供给我的帮助,甚至提示而不是答案!我是初学者(相对)和软件工程专业的学生,​​所以一切都有帮助:)它也可以解释我的新生。

这是根目录public_html目录的.htaccess文件: 在此先感谢:)

suPHP_ConfigPath /home/patters1/public_html

#AddType text/css .css

Options -Indexes
ExpiresActive On
ExpiresDefault "access plus 1 month"
  # WEEK
    <FilesMatch "\.(js|css|swf)$">
        Header set Cache-Control "public, max-age=604800"
    </FilesMatch>


RewriteEngine On
RewriteCond %{REQUEST_URI} !/selfcontrol
RewriteCond %{REQUEST_URI} !/myadmin
RewriteCond %{REQUEST_URI} !/stage
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9]+)$ index.php?a=$1
RewriteCond %{REQUEST_URI} !/selfcontrol
RewriteCond %{REQUEST_URI} !/stage
RewriteCond %{REQUEST_URI} !/myadmin
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9]+)/$ index.php?a=$1
RewriteCond %{HTTP_HOST} ^www\.pattersoncode\.ca$
RewriteRule ^/?$ "https\:\/\/pattersoncode\.ca\/" [R=301,L]
RewriteCond %{HTTP_HOST} ^!.pattersoncode\.ca$
RewriteRule ^/?$ "https\:\/\/pattersoncode\.ca\/" [R=301,L]
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule ^(.*)$ $1.gz [L]
RewriteCond %{HTTP_USER_AGENT} libwww-perl.*
RewriteRule .* – [F,L]
RewriteCond %{HTTP_HOST} !^pattersoncode\.ca$
RewriteRule ^/?$ "https\:\/\/pattersoncode\.ca\/" [R=301,L]
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://pattersoncode.ca/$1 [R=301,L]

AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript

ErrorDocument 404 /resources/error.php?a=das
ErrorDocument 401 /resources/error.php?a=4sdfdsc
ErrorDocument 403 /resources/error.php?a=4fsd
ErrorDocument 500 /resources/error.php?a=500fdf
ErrorDocument 400 /resources/error.php?a=400dsf

1 个答案:

答案 0 :(得分:0)

我建议您使用this tool检查.htaccess文件,方法是评论所有行,并一次取消注释一个规则。您的代码中有许多错误/拼写错误/重复行。

以下是一些错误:

这是一个重复的规则:

RewriteCond %{REQUEST_URI} !/selfcontrol
RewriteCond %{REQUEST_URI} !/myadmin
RewriteCond %{REQUEST_URI} !/stage
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9]+)$ index.php?a=$1
RewriteCond %{REQUEST_URI} !/selfcontrol
RewriteCond %{REQUEST_URI} !/stage
RewriteCond %{REQUEST_URI} !/myadmin
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([a-zA-Z0-9]+)$ index.php?a=$1

在这里你写了这个,但我认为你的意思是!^pattersoncode\.ca$

RewriteCond %{HTTP_HOST} ^!.pattersoncode\.ca$

你可以将它与先前的条件结合起来

RewriteCond %{HTTP_HOST} ^www\.pattersoncode\.ca$ [OR]
RewriteCond %{HTTP_HOST} ^!.pattersoncode\.ca$

为什么这个规则只能在端口80上工作,而不是以前的端口?

RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://pattersoncode.ca/$1 [R=301,L]

您应该从此规则中删除"个字符

RewriteRule ^/?$ "https\:\/\/pattersoncode\.ca\/" [R=301,L]