在我的.htaccess文件中,我正在重定向3个案例:
现在,问题是:.htaccess重定向有多贵?例如,如果我要删除www。,我是否还应该尝试在同一规则中修剪尾部斜杠?这会让我的.htaccess变得更复杂,但它值得吗?
如果是,做这些事情的最佳.htaccess是什么?我目前的.htaccess如下:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Remove www...
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1%{REQUEST_URI} [R=301,QSA,NC,L]
# Redirect To HTTPS...
RewriteCond %{SERVER_PORT} ^80$
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
现在承诺了奖金问题:
^(.*)$
作为“整个路径”模式的示例,即使它们不在规则中使用它?是不是简单.
足够快? RewriteCond %{SERVER_PORT} ^80$
和
RewriteCond %{SERVER_PORT} 80
这第二次RewriteCond是不是错了?它不会捕获180,8080端口等吗?
答案 0 :(得分:1)
.htaccess重定向有多贵?
服务器可以忽略不计。对于客户端,它是1个RTT(可能后跟更多,例如在HTTP的情况下 - > HTTPS)
例如,如果我要删除www。,我是否还应该尝试在同一规则中修剪尾部斜杠?
由你决定。如果你可以而且你认为它仍然可以保持它并且你仍然认为值得节省1 RTT - 去吧。否则 - 不要。
它会使我的.htaccess变得更复杂一点,但值得吗?
没有绝对的衡量标准。是否值得为你?
为什么在线教程总是给^(。*)$作为&#34;整个路径&#34;的一个例子。模式,即使他们不在规则中使用它?不简单。足够快,快?
技术上^(.*)$
匹配空字符串,.
没有。因此,如果您没有捕获结果,.?
的行为会相似。
重写条件是否总是正则表达式?
不。见http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond
这第二次RewriteCond是不是错了?不知道它还能捕获180,8080个端口等吗?
如果您收听的端口不仅仅是80
- 那么它确实可能会导致误报。
答案 1 :(得分:1)
由于您希望用户始终通过HTTPS进行连接,因此我建议您添加Strict-Transport-Security标头。它告诉浏览器记住永远不要连接不安全的行:
Header set Strict-Transport-Security "max-age=31536000" env=HTTPS
这告诉浏览器明年将请求透明地升级到TLS。