【问题标题】:redirecting from non www to www从非 www 重定向到 www
【发布时间】:2016-08-08 08:53:03
【问题描述】:

我有两个网站 - 我为它们制作了相同的 htaccess 文件(当然每个都有不同的链接)。他们是一样的。我的目标是从非 www 重定向到 www。现在它适用于第一个网站。对于第二个,它也可以工作,但仅在 /index 上,其余页面不会重定向。知道问题可能是什么吗?我相信我检查过的htaccess没有错误,它们应该是完全一样的。

文件 - 它适用于 AAA,不适用于 BBB。 Htaccess 代码如下:

AAA SITE:



RewriteEngine On
RewriteCond %{REQUEST_URI} !^domains/
RewriteCond %{REQUEST_URI} !^/domains/
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$
RewriteCond %{DOCUMENT_ROOT}/domains/%2 -d
RewriteRule (.*) domains/%2/$1 [DPI]


RewriteCond %{REQUEST_URI} !^subdom/
RewriteCond %{REQUEST_URI} !^/subdom/
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)\.([^\.]*)\.([^\.]*)$
RewriteCond %{DOCUMENT_ROOT}/subdom/%2 -d
RewriteRule (.*) subdom/%2/$1 [DPI]

DirectoryIndex index.html


RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^domains/[^/]+/(.+[^/])$ /$1/ [R]


RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^subdom/[^/]+/(.+[^/])$ /$1/ [R]

RewriteRule ^([^\.]+)$ $1.html [NC,L]


RewriteEngine On
RewriteBase /

## hide .html extension
# To externally redirect /dir/foo.html to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.html [NC]
RewriteRule ^ %1 [R,L,NC]

## To internally redirect /dir/foo to /dir/foo.html
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [L]
RewriteCond %{REQUEST_FILENAME} !-f

RewriteEngine On
RewriteCond %{HTTP_HOST} ^aaa\.net
RewriteRule (.*) https://www.aaa.net/$1 [R=301,QSA,L]

RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

ErrorDocument 404 https://www.aaa.net/404page

<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault A600
ExpiresByType text/javascript A604800
ExpiresByType application/javascript A604800
ExpiresByType text/css A604800
ExpiresByType image/gif A604800
ExpiresByType image/png A604800
ExpiresByType image/jpeg A604800
ExpiresByType image/x-icon A604800
ExpiresByType text/html A60
</IfModule>

<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>




BBB SITE:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^domains/
RewriteCond %{REQUEST_URI} !^/domains/
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$
RewriteCond %{DOCUMENT_ROOT}/domains/%2 -d
RewriteRule (.*) domains/%2/$1 [DPI]


RewriteCond %{REQUEST_URI} !^subdom/
RewriteCond %{REQUEST_URI} !^/subdom/
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)\.([^\.]*)\.([^\.]*)$
RewriteCond %{DOCUMENT_ROOT}/subdom/%2 -d
RewriteRule (.*) subdom/%2/$1 [DPI]

DirectoryIndex index.html


RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^domains/[^/]+/(.+[^/])$ /$1/ [R]


RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^subdom/[^/]+/(.+[^/])$ /$1/ [R]

RewriteRule ^([^\.]+)$ $1.html [NC,L]

# Turn mod_rewrite on
RewriteEngine On
RewriteBase /

## hide .html extension
# To externally redirect /dir/foo.html to /dir/foo
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s([^.]+)\.html [NC]
RewriteRule ^ %1 [R,L,NC]

## To internally redirect /dir/foo to /dir/foo.html
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [L]
RewriteCond %{REQUEST_FILENAME} !-f


RewriteEngine on
RewriteCond %{HTTP_HOST} ^bbb\.net
RewriteRule (.*) https://www.bbb.net/$1 [R=301,QSA,L]


RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

ErrorDocument 404 https://www.bbb.net/404page

<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault A600
ExpiresByType text/javascript A604800
ExpiresByType application/javascript A604800
ExpiresByType text/css A604800
ExpiresByType image/gif A604800
ExpiresByType image/png A604800
ExpiresByType image/jpeg A604800
ExpiresByType image/x-icon A604800
ExpiresByType text/html A60
</IfModule>

<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>

【问题讨论】:

  • 你是什么意思它不让你?将代码粘贴到代码块中
  • 至少有一些来自 htaccess 的行与它相关。第一个 AAA 工作,第二个 BBB 不 RewriteEngine On RewriteCond %{HTTP_HOST} ^aaa\.net RewriteRule (.*) aaa.net/$1 [R=301,QSA,L] RewriteEngine On RewriteCond %{HTTPS} !在 RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} RewriteEngine on RewriteCond %{HTTP_HOST} ^bbb\.net RewriteRule (.*) bbb.net/$1 [R=301,QSA,L] RewriteEngine On RewriteCond %{HTTPS} !on RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
  • 它说我没有发送超过 2 个链接的声誉
  • 将您的代码粘贴到您的问题中,而不是作为评论
  • 好的,但你应该把代码实际放入你的问题

标签: .htaccess redirect


【解决方案1】:

对于两个网站(AAABBB),请使用以下内容:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(?!www\.) [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

这翻译为:

【讨论】:

  • 我试过了,但是我不确定这是否是我应该输入的最终代码?我应该以某种方式添加AAA还是BBB?我应该用这个代替什么?基本上无论我尝试过什么,它都说由于重定向太多而无法加载网站。
  • 我很抱歉。我原来写的重写条件太宽泛了。我已经修改了它。它现在应该可以工作了,所以请再次测试它。