APACHE SSL WWW 重定向到实名

APACHE SSL WWW redirect to real name

在 .htaccess 文件中:

# Enable mod_rewrite
RewriteEngine on

# Rewrite file name
RewriteRule ^dome.htm$ dome.php [L,QSA]


# Force www
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# Force SSL
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]

强制 SSL 和 WWW 工作正常,除了重写文件名,其中请求来自 URL 它 return 为真实文件名 https://www.example.com/dome.php:

example.com/dome.htm
www.example.com/dome.htm
https://example.com/home.htm

访问URL以上时如何保持https://www.example.com/dome.htm

简单:

RewriteRule    ^dome.htm?$    dome.php [NC,L]    # Handle requests for "dome"

您需要更改处理顺序:

# Enable mod_rewrite
RewriteEngine on

# Force www
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# Force SSL
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L,NE]

# Rewrite file name
RewriteRule ^dome\.htm$ dome.php [L,QSA]

另请注意 RewriteRule 中稍作修改的正则表达式 ;-)

为什么这会有所不同?想象一下传入请求被重写......根据您的规则顺序,请求 first 被重写为 /dome.phpthen 重定向到 https://%{HTTP_HOST}%{REQUEST_URI},这将指示浏览器从那个新的 URL 加载 /dome.php... RewriteRules 从上到下处理。当然,您指定了 [L] 标志,但这只会结束重写 _for 该迭代!如果最后一次迭代更改了请求(执行了重写),则 另一个 迭代由 http 服务器完成。

另一种方法是保留您的规则顺序,但使用 [END] 标志而不是 [L] 来执行您想要的操作。但它仅在 apache http 服务器的较新版本上受支持,从 2.4 版开始。