【问题标题】:URL re-write not working without www没有 www,URL 重写不起作用
【发布时间】:2015-10-20 13:55:36
【问题描述】:

我在 URL 重写方面遇到了一些我无法弄清楚的问题。这就是问题所在。

此网址正确重定向:
http://domain.com/index.php?en=oldpage

但是,此 URL IS 正确重定向:
http://www.domain.com/index.php?en=oldpage

网址中没有正确重定向的唯一区别是缺少www.

这是我正在使用的重写:

RewriteCond %{QUERY_STRING} ^en=oldpage
RewriteRule ^(index.php/|)$ /newpage.html? [R=301,L]

我也有此重写 BEFORE 其他重写,以处理没有“www.”的网址:

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

为什么没有“www”就不会重定向。 ?任何帮助将非常感激。谢谢。

【问题讨论】:

  • 你能定义not redirecting properly吗?这是否意味着或根本不重定向?您的规则是否与您在问题中的顺序相同?
  • 因为重定向不正确。它只是将用户返回到主页(www.domain.com),而不是预期的重写。我有重写:RewriteCond %{HTTP_HOST} !^www\。 ...首先,在 RewriteCond %{QUERY_STRING} ^en=oldpage ... 之前,问题会变得更加清晰。
  • 您的规范www 工作正常吗? RewriteRule 中的模式 ^(index.php/|)$ 与您发布的示例 URL 都不匹配(有或没有 www),所以这里肯定有“其他事情”。
  • 现在重写工作正常。我不知道的服务器相关问题。谢谢

标签: apache .htaccess url-rewriting rewrite no-www


【解决方案1】:

我猜这些规则下面有一些代码/规则将查询字符串添加回您的 URL。

根据不会被覆盖的 THE_REQUEST 变量尝试这些规则:

RewriteEngine On

RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

RewriteCond %{THE_REQUEST} \s/+(?:index\.php)?\?en=oldpage [NC]
RewriteRule ^ /newpage.html? [R=301,L]

请务必在清除浏览器缓存后对其进行测试。

【讨论】:

  • 我删除了旧的重写并在清除缓存后尝试了您的示例...仍然与旧的重写相同。仅适用于包含“www”的 URL。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 2020-10-05
  • 2016-12-18
  • 2023-03-24
  • 1970-01-01
相关资源
最近更新 更多