.htaccess 仅当 URL 与特定 URL 不匹配时才重定向

.htaccess 仅当 URL 与特定 URL 不匹配时才重定向

在我们的应用中,我们允许自定义域,因此用户可以创建:

custom.my.example.com

我们映射到:

app.our.example.com

在我们的应用中,我们强制使用 SSL,除非用户输入如下预览 URL:

custom.my.example.com/preview/blah

目前,如果用户只输入“custom.my.example.com”,他们会收到 SSL 错误,因为当前规则仅免除了 /preview/blah 的强制重定向。我如何创建一条规则,以便如果用户输入“custom.my.example.com”而不输入 /preview,它会将他们重定向到http://custom.my.example.com/domain来表达特殊信息?

当前 .htaccess 规则:

RewriteEngine On
RewriteBase /

RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} !^/preview
RewriteCond %{QUERY_STRING} !^/preview
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

我们在 CentOS 6.5 上和 Apache 2.2 上使用 CodeIgniter。

谢谢!

答案1

已修复!以下是更新后的重写版本:

RewriteEngine On
RewriteBase /

# start new rules
RewriteCond %{HTTP_HOST} !^(.*).ourdomain.com
RewriteCond %{REQUEST_URI} !^/preview
RewriteCond %{QUERY_STRING} !^/preview
RewriteRule ^(.*)$ https://app.ourdomain.com/domain [L,R=301]
# end new rules

RewriteCond %{HTTPS} !=on
RewriteCond %{REQUEST_URI} !^/preview
RewriteCond %{QUERY_STRING} !^/preview
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

相关内容