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.php
,then 重定向到 https://%{HTTP_HOST}%{REQUEST_URI}
,这将指示浏览器从那个新的 URL 加载 /dome.php
... RewriteRules 从上到下处理。当然,您指定了 [L]
标志,但这只会结束重写 _for 该迭代!如果最后一次迭代更改了请求(执行了重写),则 另一个 迭代由 http 服务器完成。
另一种方法是保留您的规则顺序,但使用 [END]
标志而不是 [L]
来执行您想要的操作。但它仅在 apache http 服务器的较新版本上受支持,从 2.4 版开始。
在 .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.php
,then 重定向到 https://%{HTTP_HOST}%{REQUEST_URI}
,这将指示浏览器从那个新的 URL 加载 /dome.php
... RewriteRules 从上到下处理。当然,您指定了 [L]
标志,但这只会结束重写 _for 该迭代!如果最后一次迭代更改了请求(执行了重写),则 另一个 迭代由 http 服务器完成。
另一种方法是保留您的规则顺序,但使用 [END]
标志而不是 [L]
来执行您想要的操作。但它仅在 apache http 服务器的较新版本上受支持,从 2.4 版开始。