.htaccess 重定向但排除某些文件夹

.htaccess redirect but exclude some folder

您好,我正在使用 cpanel。在 cpanel 中,我创建了一个重定向,它创建了一个像这样的 .htaccess。

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteOptions inherit
Options -Indexes

# php -- BEGIN cPanel-generated handler, do not edit
# Set the “ea-php73” package as the default “PHP” programming language.
<IfModule mime_module>
  AddHandler application/x-httpd-ea-php73 .php .php7 .phtml
</IfModule>
# php -- END cPanel-generated handler, do not edit
RewriteCond %{HTTP_HOST} ^paw\.xevz\.migor\.eu$ [OR]
RewriteCond %{HTTP_HOST} ^www\.paw\.xevz\.migor\.eu$
RewriteRule ^/?$ "http\:\/\/paw\.xevz\.migor\.eu\/mainfolder" [R=301,L]

这个问题,当我在 public 目录中添加新文件夹并查看我的页面时,它总是会重定向到 'mainfolder'。如果我的 link 类似于 http://paw.xevz.migor.eu/subfolder,我将如何添加不会重定向到主文件夹的 RewriteCond?我这样试过,

RewriteCond %{REQUEST_URI} !^/subfolder/    
RewriteCond %{HTTP_HOST} ^paw\.xevz\.migor\.eu$ [OR]
RewriteCond %{HTTP_HOST} ^www\.paw\.xevz\.migor\.eu$
RewriteRule ^/?$ "http\:\/\/paw\.xevz\.migor\.eu\/mainfolder" [R=301,L]

但运气不好。请帮忙谢谢

P.S。我的 .htaccess 中的那些 links 只是示例。

RewriteRule ^/?$ 只会匹配和重定向着陆页 URI。最后您可能有一个前端控制器规则,它将所有内容重写为 ?page=something 之类的东西,并且会针对所有不是文件或目录的 URI 触发此重定向规则。

您可以改用此重定向规则:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{HTTP_HOST} ^(?:www\.)?paw\.xevz\.migor\.eu$ [NC]
RewriteRule ^$ /mainfolder/ [R=302,L]

确保这是 RewriteEngine On 行下方的最顶层规则,并在清除浏览器缓存后对其进行测试。

一旦您确认它工作正常,请将 R=302 替换为 R=301。在测试 mod_rewrite 规则时避免使用 R=301(永久重定向)。

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 将确保此规则不会因其他规则而在 1 次或多次重写后执行。