Apache 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

我建议使用此工具检查.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]

最新更新