将站点移动到子域后,URL会重复/重定向到www

时间:2016-09-23 14:51:22

标签: .htaccess mod-rewrite

我们有一个非常奇怪的问题,似乎与.htaccess有关。我们被困住了。

我们有一个网站,客户想要相同的'网站',在子域上有不同的内容。

我们将现有网站复制到子域。 并且由于其中的重写而不得不编辑.htaccess。

现在我们在不同的浏览器上获得了不同的结果。 Safari似乎工作得很好。 Chrome会在正常模式下重定向到www.subdomain.domain.nl。 Chrome - 隐身模式运行正常。 Firefox - 适用于除基本网址之外的所有网页。 当在Firefox上转到subdomain.domain.nl时,url会不断重复。 它会重定向到http://subdomain.domain.nl/subdomain.domain.nl/subdomain.domain.nl/subdomain.domain.nl/subdomain.domain.nl/subdomain.domain.nl/subdomain.domain.nl/subdomain.domain.nl/ ......这会持续一段时间。

这是.htaccess,它是原始文件的副本,其重写始终为www。版本已删除。

htaccess的:     php_value upload_max_filesize 8M

Options +FollowSymLinks
RewriteEngine On
RewriteBase /
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]

RewriteRule ^image.php($|/) - [L]
# RewriteRule ^footer.php($|/) - [L]
# RewriteRule ^(vraag_verwerk.php) - [L]
RewriteRule ^(captcha.php) - [L]

 # stuff to let through (ignore)
  RewriteCond %{REQUEST_URI} "/2014/" [OR]
  RewriteCond %{REQUEST_URI} "/images/" [OR]
  RewriteCond %{REQUEST_URI} "/css/" [OR]
  RewriteCond %{REQUEST_URI} "/js/" [OR]
  RewriteCond %{REQUEST_URI} "/admin/"
  RewriteRule (.*) $1 [L]
  #

# RewriteRule ^([^/]*)/([^/]*)$ /index.php?nav=$1&sub=$2 [L]
RewriteRule ^favicon\.ico$ /favicon.ico [L]
RewriteRule . index.php

我玩了这部分,删除原文,添加了我发现的其他几个可能的重写规则:

 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]

最初是:

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

Redirect 301 /home http://www.domain.nl

但据我了解,这只是将/ home重定向到基本URL并添加www。如果没有被访客添加。将它们全部移除并没有帮助。

我对这可能是什么感到茫然。特别是因为3个浏览器会产生不同的结果。

有任何建议,还是我们正朝着完全错误的方向寻找?

亲切的问候,

马亭

2 个答案:

答案 0 :(得分:0)

我很难按照您想要的方式行事。

它看起来像第一个块(从" RewriteRule ^ image.php"到最后)的所有内容都可以替换为:

FallbackResource /index.php

除此之外,看起来您正试图1)全球启用HTTPS,2)添加' www'到主机名,3)map / home到不同的主机?这是对的吗?

如果是这样,您应该考虑使用https://wiki.apache.org/httpd/CanonicalHostNames处的技术大纲 - 也就是说,而不是在.htaccess文件中混淆,将Redirect放在定义非首选主机名的VirtualHost块中:

<VirtualHost *:80>
  ServerName example.com
  Redirect / http://www.example.com/
</VirtualHost>

具有易于维护和更好的请求时间效率的优点。 (不必比较每个请求的重写规则,只需要比较初始请求。)

如果我误解,请提供更多详细信息,我会再试一次。

答案 1 :(得分:0)

当时删除了一行&amp;在小组中,我终于发现, 删除以下内容使其工作并停止重复URL,这发生在更多系统上。

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]

即使清除了缓存,我仍然可以在Chrome上重定向到www.subdomain.domain.nl。但这似乎只在我的系统上,只有当我去主页时。我们在多个系统上进行了测试,只有我的Chrome才这样做。 所以我想这是缓存,与此.htaccess

无关