0

我希望提出一个新问题是跟进现有问题的正确方法(?) - 如果不是,请耐心等待,我对 stackoverflow 非常陌生。也就是说,我指的是隐藏html扩展+重定向.html版本+特殊情况异常

到目前为止,用户 Jon Lin 提供的 htaccess 工作得很好,但现在我正在努力解决一个相关的问题(我认为它与 htaccess 有关),那就是对我们网站上的一个特定页面使用共享 ssl 证书,我们称之为 baz.html

由于现有/引用的 htaccess,hxxp://mydomain.com/baz.html 解析为 hxxp://mydomain.com/baz,这很好。但是,尝试在 hxxps://shared.host.com/~user/baz(.html) 使用共享 ssl 会导致 404 not found 错误。我很确定(我假设是这样)这是由于使用了 htaccess,因为我们的主机提供的共享 ssl 教程几乎是无误的。

此外,当使用共享 ssl 访问文档根目录 (foo.html) 时,它会显示(作为唯一的非 404),但 CSS(+images) 虽然在 html 代码中相对链接,但未处理。我假设(?)这是相关的。

基本上,我想要实现的是在我们的主站点导航中链接 hxxps://shared.host.com/~user/baz 而不是 hxxp://mydomain.com/baz 以实现安全页面(与我相同)现在为 foo(.html)、bar(.html) 执行,仅用于不安全的内容)

我希望我的实际问题是完全可以理解的(?)。我不想将我们的实际项目页面链接到不做某种自我广告。如果需要访问实际页面来回答问题,我肯定会提供一个链接(如果明确要求)

提前致谢。

4

1 回答 1

0

您不能在共享 SSL 主机中使用相同的 htaccess 文件,因为基础不同(/~user/而不仅仅是/),这将改变所有规则的固有工作方式。因此,对于这些相同的规则,您需要考虑不同的基础。如果将这些规则放在/~user/目录中的 htaccess 文件中,它们需要如下所示:

编辑:由于它们是相同的文档根目录,因此您需要复制所有规则,一个用于 SSL,一个不用于

RewriteEngine On

# 1. hiding the .html extensions
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} ^/(.*?)/?$
RewriteCond %{DOCUMENT_ROOT}/~user/%1.html -f
RewriteRule ^ /~user/%1.html [L]

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/(.*?)/?$
RewriteCond %{DOCUMENT_ROOT}/%1.html -f
RewriteRule ^ /%1.html [L]


# 2. 301 redirecting .html version
RewriteCond %{HTTPS} on
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /~user/([^\ ]+)\.html
RewriteCond %1 !foo$
RewriteRule ^ /~user/%1 [L,R=301]

RewriteCond %{HTTPS} off
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^\ ]+)\.html
RewriteCond %1 !foo$
RewriteRule ^ /%1 [L,R=301]


# 3. typing /foo.html to resolve to / as well as typing /foo to resolve to / 
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} ^/~user/(.*?/?)foo(\.html)?$
RewriteRule ^ /~user/%1 [L,R=301]

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/(.*?/?)foo(\.html)?$
RewriteRule ^ /%1 [L,R=301]

现在为了将/bazand/baz.html重定向到 SSL,您需要在domain.com文档根目录(非 SSL规则)中的任何规则(在 下方RewriteEngine On)之前添加它:

编辑:由于文档根目录相同,您需要添加条件以检查它是否为 SSL

RewriteCond %{HTTPS} off
RewriteRule ^/?baz(\.html)?/?$ http://shared.host.com/~user/baz [L,R=301]
于 2012-10-22T06:26:17.943 回答