我想重定向www.example.com
到example.com
。以下htaccess代码可实现此目的:
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
但是,有没有一种方法可以以通用的方式而不用对域名进行硬编码?
我想重定向www.example.com
到example.com
。以下htaccess代码可实现此目的:
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
但是,有没有一种方法可以以通用的方式而不用对域名进行硬编码?
Answers:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
如同 迈克尔的除了这一作品:P
RewriteEngine On
使它起作用的先驱。
http://www.domain.com/
到http://domain.com//
。您应该添加/
到中RewruteRule
。这对我有用RewriteRule ^/(.*)$ http://%1/$1 [R=301,L]
。
http://domain.com//
双斜杠,我遇到了与弗拉基米尔相同的问题。所以我做到了RewriteRule ^(.*)$ http://%1$1 [R=301,L]
,到目前为止似乎还
但是,如果我们需要对单独的http和https执行此操作:
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} ^www.example.com/$ [NC] RewriteRule ^(.*)$ http://www.example.com [R=301,L]
...
.htaccess
你不应该得到一个额外的斜线。(请注意,如果要在服务器配置中执行此重定向,则可能不应该使用mod_rewrite开头... Redirect
在适当的vhost容器中使用简单的mod_alias 会更有效,并且更不容易出错。)
将非www重定向到www(均为:http + https)
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteEngine On
和RewriteBase /
,但否则效果很好。
如果要在httpd.conf文件中执行此操作,则可以在不使用mod_rewrite的情况下执行此操作(显然这样做对性能更好)。
<VirtualHost *>
ServerName www.example.com
Redirect 301 / http://example.com/
</VirtualHost>
我在这里得到了这个答案:https : //serverfault.com/questions/120488/redirect-url-within-apache-virtualhost/120507#120507
以下是将www URL重定向到no-www的规则:
#########################
# redirect www to no-www
#########################
RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule ^(.*) http://%1/$1 [R=301,NE,L]
以下是将无www网址重定向到www的规则:
#########################
# redirect no-www to www
#########################
RewriteCond %{HTTP_HOST} ^(?!www\.)(.+) [NC]
RewriteRule ^(.*) http://www.%1/$1 [R=301,NE,L]
请注意,我使用NE
标志来防止apache转义查询字符串。如果没有此标志,则apache会将请求的URL更改http://www.example.com/?foo%20bar
为http://www.example.com/?foo%2250bar
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^/(.*)$ https://%1/$1 [R]
在RewriteCond
捕捉一切都在HTTP_HOST
变化后的www.
并保存在%1
。
在RewriteRule
捕获没有领先的URL /
并保存在$1
。
sans leading "/"
-在.htaccess
(如问题所述)中,没有前导/
,因此模式永远不会匹配,重定向也不会发生。(在服务器或虚拟主机上下文中只有一个斜杠。)此外,如果在此之后有任何mod_rewrite指令,则将需要该L
标志。
尝试这个:
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^(.*)$ %{HTTP_HOST}$1 [C]
RewriteRule ^www\.(.*)$ http://$1 [L,R=301]
如果主机以www开头,则将整个主机粘贴到URL的开头,然后删除“ www”。
.htaccess
。在目录上下文(.htaccess
)中,您应该将第一个更改为RewriteRule
:(RewriteRule ^(.*)$ %{HTTP_HOST}/$1 [C,DPI]
需要Apache 2.2.12+)。请注意,添加了斜杠和DPI
(Discard Path Info)标志-以防止部分URL路径看起来重复(实际上是“ path-info”),如先前的注释所述。但是,还有更简单的指令-如其他答案所述。
完整的通用WWW处理程序,http / https
我没有找到完整的答案。我用它来处理WWW收录。
请让我知道这是如何工作的,或者是否留下漏洞。
RewriteEngine On
RewriteBase /
# Force WWW. when no subdomain in host
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$ [NC]
RewriteCond %{HTTPS}s ^on(s)|off [NC]
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# Remove WWW. when subdomain(s) in host
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|off [NC]
RewriteCond http%1://%{HTTP_HOST} ^(https?://)(www\.)(.+\.)(.+\.)(.+)$ [NC]
RewriteRule ^ %1%3%4%5%{REQUEST_URI} [R=301,L]
www
到non- www
。您正在强迫加入www
。
我发现有关htaccess重定向的信息可能很多。首先,请确保您的站点在使用Apache的Unix上运行,而不是在Windows主机上运行(如果您希望此代码可以运行)。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
(不过,请确保每行文本之间没有行间距;我在行之间添加了额外的间距,以便在此窗口中可以正常显示。)
这是一小段代码,可用于将网站的www版本定向到http://版本。也可以使用其他类似的代码。
对于那些无需使用“ www”前缀即可访问整个网站的用户。
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ http%{ENV:protossl}://%1%{REQUEST_URI} [L,R=301]
母马确保将其添加到以下文件
/site/location/.htaccess
protossl
环境变量(这不是标准/服务器变量)。该字段将始终为空,因此将始终重定向至http
。(protossl
在代码中更早设置的想法是要在重定向时保留协议。但是,这些天您可能应该一直重定向到https
。)
使用.htaccess重定向到www或非www:
只需将以下代码行放入主根.htaccess文件中。在这两种情况下,只需将domain.com更改为您自己的主机名即可。
重定向到www
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^domain\.com [NC]
RewriteRule ^(.*)$ http://wwwDOTdomainDOtcom/$1 [L,R=301]
</IfModule>
重定向到非www
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.domain\.com [NC]
RewriteRule ^(.*)$ http://domainDOTcom/$1 [L,R=301]
</IfModule>
将DOT更改为=>。!!!
我使用上述规则将www转换为no www,但对于首页来说效果很好,但是在内部页面上,它们正转发到/index.php
我在我的.htaccess文件中找到了这条其他规则,这是造成此问题的原因,但不确定如何处理。任何建议都会很棒:
############################################
## always send 404 on missing files in these folders
RewriteCond %{REQUEST_URI} !^/(media|skin|js)/
############################################
## never rewrite for existing files, directories and links
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
############################################
## rewrite everything else to index.php
RewriteRule .* index.php [L]
使用https将www转换为非www
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteEngine on
# if host value starts with "www."
RewriteCond %{HTTP_HOST} ^www\.
# redirect the request to "non-www"
RewriteRule ^ http://example.com%{REQUEST_URI} [NE,L,R]
如果你想删除www
两个http
和https
,使用以下命令:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.
RewriteCond %{HTTPS}s ^on(s)|offs
RewriteRule ^ http%1://example.com%{REQUEST_URI} [NE,L,R]
这将重定向非SSL
至
和SSL
至
在apache上,2.4.*
您可以使用Redirect
with if
指令完成此操作,
<if "%{HTTP_HOST} =='www.example.com'">
Redirect / http://example.com/
</if>
用途:JavaScript / jQuery
// similar behavior as an HTTP redirect
window.location.replace("http://www.stackoverflow.com");
// similar behavior as clicking on a link
window.location.href = "http://stackoverflow.com";
或.htaccess:
RewriteEngine On
RewriteBase /
Rewritecond %{HTTP_HOST} ^www\.yoursite\.com$ [NC]
RewriteRule ^(.*)$ https://yoursite.com/$1 [R=301,L]
和PHP方法:
$protocol = (@$_SERVER["HTTPS"] == "on") ? "https://" : "http://";
if (substr($_SERVER['HTTP_HOST'], 0, 4) !== 'www.') {
header('Location: '.$protocol.'www.'.$_SERVER ['HTTP_HOST'].'/'.$_SERVER['REQUEST_URI']);
exit;
}
阿贾克斯
$.ajax({
type: "POST",
url: reqUrl,
data: reqBody,
dataType: "json",
success: function(data, textStatus) {
if (data.redirect) {
// data.redirect contains the string URL to redirect to
window.location.href = data.redirect;
}
else {
// data.form contains the HTML for the replacement form
$("#myform").replaceWith(data.form);
}
}
});
如果您强迫www。在url中或强制使用ssl协议,然后尝试在htaccess文件中使用可能的变体,例如:
RewriteEngine开 RewriteBase / ###强制WWW ### RewriteCond%{HTTP_HOST} ^ example \ .com RewriteRule(。*)http://www.example.com/$1 [R = 301,L] ##强制SSL ### RewriteCond%{SERVER_PORT} 80 RewriteRule ^(。*)$ https://example.com/$1 [R,L] ##阻止IP的### 拒绝订单,允许 拒绝自256.251.0.139 拒绝来自199.127.0.259
RewriteCond %{SERVER_PORT} 80
我建议使用更通用的检查:RewriteCond %{HTTPS} off
如果.htaccess自定义不是理想的选择,请使用其他方法:
我已经创建了供公众使用的简单重定向服务器。只需添加A或CNAME记录:
CNAME r.simpleredirect.net
A 89.221.218.22
我不确定为什么要删除www。但是反向版本将是:
# non-www.* -> www.*, if subdomain exist, wont work
RewriteCond %{HTTP_HOST} ^whattimein\.com
RewriteRule ^(.*)$ http://www.whattimein.com/$1 [R=permanent,L]
该脚本的优点是:如果您有test.whattimein.com之类的东西或其他任何东西(用于开发/测试的环境),它将不会将U重定向到原始环境。
这已更新为可在Apache 2.4上使用:
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
与Michael相比,唯一的变化是删除了[NC]
,这会产生“ AH00665”错误:
非正则表达式模式-f的NoCase选项不受支持,将被忽略
RewriteCond %{REQUEST_FILENAME} !-f [NC]
)相关。该NC
标志在上面没有什么区别,但是,在此处应使用该NC
标志的原因是为了捕获一小部分(错误地)发送大写主机名的僵尸网络流量。
如果是localhost,则添加,忽略重定向(出于本地环境的开发目的)。如果不是localhost AND(不是https或www),则重定向到https和非www。
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !localhost [NC]
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
嗨,您可以在htaccess文件上使用以下规则:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example.com
RewriteRule (.*) http://www.example.com/$1 [R=301,L]