【问题标题】:.HTACCESS - redirect www.example.com/side.php?id=* to www.example.com.HTACCESS - 将 www.example.com/side.php?id=* 重定向到 www.example.com
【发布时间】:2012-06-08 07:32:00
【问题描述】:

我最近协助将一个网站从一个纯开发域迁移到一个实时站点,在该站点中,曾经有一个站点由另一个 CMS 系统处理,而不是我们目前使用的。当前系统是 Joomla,但我认为这对我的问题并不重要。

因此,对于当前站点,URL 是从标准 Joomla 格式重写以去除 index.php 并在地址中添加 .html 后缀,这意味着 URL 看起来像这样:

http://example.com/folder/page.html

在由另一个 CMS 系统处理的旧网站中,URL 具有以下结构:

http://example.com/side.php?id=1

我们是一个社会组织,有许多网站链接到我们——也有不少我们甚至不知道——所以我需要处理的问题是:我需要重定向其他网站上的所有这些死链接,以便他们只是被指向我们网站的根目录。

谁能给我解释一下如何使.htaccess重定向如下:

/side.php?id=* 到 example.com 的根目录

在这种情况下,我的意思是 * 表示任何数字,因为自然有很多具有不同 ID 的页面。

如果他们指向 www 对我来说没有任何意义。前缀与否。

提前感谢您的帮助,我希望我之前没有问过一个已经回答过的问题,但是我在 .htaccess 方面的经验非常有限,并且搜索并尝试了不同的解决方案对我没有帮助。

【问题讨论】:

  • 如果您关心搜索引擎,那么您应该关心 www 子域。

标签: php string .htaccess redirect root


【解决方案1】:

在根文件夹的.htaccess中,添加以下内容:

RewriteEngine on
RewriteCond %{QUERY_STRING} id=\d+
RewriteRule ^side\.php$ http://%{SERVER_NAME}/ [R=301,L,QSD] #Remove the ",QSD" for Apache <2.4.0, or to keep the query string.

R=301 将告诉浏览器/搜索引擎该页面已被永久移动。

【讨论】:

  • 也谢谢你,Scott,但是这个解决方案也在向我射击 404……我不太明白。
  • 您被重定向到哪个地址? (您可以使用 example.com 保护隐私)
  • 据我所知,它根本没有重定向 - 它仍然只是说明 example.com/side.php?id=1
  • 仅供参考,这条规则不起作用 - RewriteRule 根本不会匹配请求的查询字符串部分。
  • 是的,我刚刚意识到并正在修复它。
【解决方案2】:

这样的规则应该有效:

RewriteCond %{HTTP_HOST} .*
RewriteCond %{QUERY_STRING} id=\d+
RewriteRule ^side.php http://example.com [L,R=301]

这将在外部重定向,并带有 HTTP 301 响应(永久移动)

【讨论】:

  • example.com/side.php?id=1 这会产生 404 错误。我直接从这里粘贴到我的 .htaccess 并通过 FTP 上传。你还有什么建议吗?感谢您的帮助!
  • 嗯,这应该可以。您可以在 .htaccess 中添加一些随机字符以查看它是否正在被处理吗? (如果是,会抛出500错误)
  • 添加“hsjdhksjdhskj”并上传文件时确实产生了 500 错误,所以我不太确定这里出了什么问题。
  • /side.php?id=1 是我在浏览器中添加到根域的内容
  • 我的 htaccess 中也有这个 - 我想知道这是否是问题的根源:“RewriteRule .* index.php [F]” ...我只是认为它与您的 RewriteCond 匹配?再说一次,我有点过头了:)
【解决方案3】:

您需要的是一些301 Moved Permanently 回复,让浏览器和搜索引擎知道您正在将页面移动到新位置。我不会使用 mod_rewrite 将 all 请求重定向到此 side.php 页面,而是分析您旧网站的每个页面并确定所有内容已移动到何处。有了这个,使用 htaccess Rewrite directive 通知浏览器个别页面正在移动

Redirect 301 /side.php?id=123 /about_us.html
Redirect 301 /side.php?id=456 /contact_us.html

我推荐这种方法,因为它会将那些导航到过时页面的人重定向到与他们请求的旧页面内容相似的新页面,而不是仅仅将他们全部重定向到您的主页。

【讨论】:

  • 嗯,问题是很多网站都链接到旧网站,并且没有一对一的结构(根本)所以这样做并不是一个真正的选择
  • @CasperDamsgaard 真可惜。在这种情况下,你可以Redirect 301 /side.php /
  • 这是正确地进行实际重定向 - 但是它在 side.php 之后的代码片段中留下......这意味着它在浏览器中键入的链接如下所示:example.com/? id=1
  • 有什么办法可以摆脱它吗? :)
  • @CasperDamsgaard Apache 文档对查询字符串和重定向一无所知。我的猜测是尝试Redirect 301 /side.php?id= /,但我有一种预感,那就是那行不通,所以你最好按照其他人的建议坚持使用mod_rewrite
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-18
  • 2018-02-07
  • 2019-11-11
  • 1970-01-01
  • 2021-09-16
  • 2017-10-26
  • 1970-01-01
相关资源
最近更新 更多