【发布时间】:2016-12-11 05:19:50
【问题描述】:
在我的 .htaccess 文件中,我在 3 种情况下重定向:
- HTTP 转 HTTPS
- 如果路径不是目录,则修剪尾部斜杠
- 如果有 www.在域之前
现在,问题是:.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等端口吗?
【问题讨论】:
-
".htaccess 重定向有多贵" --- 至少 1 个 RTT
-
@zerkms 这有什么要担心的吗?我对这个问题的意思是,究竟将要执行什么。是否会再次进行整个域查找?
-
"是否会再次进行整个域查找?" --- 你不能这么说。很可能没有,但没有标准可以保证你。顺便说一句,当我为性能优化而烦恼时,我个人遵循简单的规则:我不在乎任何我无法可靠测量的东西。那么,请回答自己,您可以可靠地衡量问题中解决的哪些问题?
-
@zerkms 嗯,有趣的策略,但我个人不同意。如果我不知道某事是否会造成麻烦,但我认为它可能会造成麻烦,我会防范它。
-
@RoboRobok 1. 性能优化是一门火箭科学。 2. 没有人可以预测什么对你不起作用 3. 没有适合所有人的通用食谱 4. 除非你是 google-fb-amazon-size - 几乎所有东西都对你同样有用。 5. 当你变得足够大并且有任何“严重”的负担时——你就会有足够的信心进行研究,而不是在 SO 上提出模糊的问题
标签: php apache .htaccess redirect mod-rewrite