.HTACCESS-将www.example.com/side.php?id=*重定向到www.example.com

.HTACCESS-将www.example.com/side.php?id=*重定向到www.example.com,php,string,.htaccess,redirect,root,Php,String,.htaccess,Redirect,Root,我最近协助将一个网站从一个纯开发领域转移到一个活动网站,在那里,曾经有一个网站由另一个CMS系统处理,而不是我们目前使用的。目前的系统是Joomla,但我认为这对我的问题不重要 因此,对于当前站点,URL从标准Joomla格式重写,去掉index.php,并在地址中添加.html后缀,这意味着URL如下所示: 在另一个CMS系统处理的旧站点中,URL具有以下结构: 我们是一个社会组织,有许多网站链接到我们——也有很多我们甚至不知道——所以我需要处理的问题是:我需要重定向其他网站上的所有这些死

我最近协助将一个网站从一个纯开发领域转移到一个活动网站,在那里,曾经有一个网站由另一个CMS系统处理,而不是我们目前使用的。目前的系统是Joomla,但我认为这对我的问题不重要

因此,对于当前站点,URL从标准Joomla格式重写,去掉index.php,并在地址中添加.html后缀,这意味着URL如下所示:

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

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

任何人都可以向我解释如何使.htaccess重定向如下:

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

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

他们是否指向www.前缀对我来说没有任何意义


提前感谢您的帮助,我希望我没有问过以前已经回答过的问题,但我对.htaccess的经验非常有限,搜索和尝试不同的解决方案对我没有帮助。

像这样的规则应该有效:

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

这将通过HTTP 301响应(永久移动)从外部重定向。在根文件夹的.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.
重新编写引擎打开
RewriteCond%{QUERY\u STRING}id=\d+

重写规则^side\.php$http://%{SERVER_NAME}/[R=301,L,QSD]#删除Apache的“、QSD”这里需要一些响应,让浏览器和搜索引擎知道您正在将页面移动到新位置。我不会使用mod_重写将所有请求重定向到this side.php页面,而是分析旧网站的每个页面,确定所有内容都被移动到了哪里。有了这个功能,可以使用htaccess通知浏览器正在移动的各个页面

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

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

如果您关心搜索引擎,那么您应该关注www subdomain.example.com/side.php?id=1正在产生404错误。我直接从这里粘贴到我的.htaccess,并通过FTP上传。你还有别的建议吗?谢谢你的帮助!嗯,这应该行得通。你能给你的.htaccess添加一些随机字符看看它是否正在被处理吗?(如果是的话,它会抛出500个错误)添加“hsjdhkskj”并上传文件确实产生了500个错误,所以我不太确定这里出了什么问题。/side.php?id=1是我在浏览器中添加到根域的内容。我的htaccess中也有这个-我想知道这是否是问题的根源:“RewriteRule.*.index.php[F]”。。。我只是在想它和你的重写相符?再一次,我有点不知所措:)好吧,问题是很多站点链接到旧站点,并且没有一对一的结构(根本没有),所以像这样做并不是一个真正的问题option@CasperDamsgaard真遗憾。在这种情况下,您可以
重定向301/side.php/
这是正确地执行实际重定向-但是它会在side.php之后的代码片段中留下。。。这意味着它在浏览器中键入的链接如下所示:example.com/?id=1有没有办法摆脱它?:)@CasperDamsgaard Apache文档在查询字符串和重定向方面没有任何内容。我的猜测是尝试
Redirect 301/side.php?id=/
,但我有一种预感,那是行不通的,所以你最好像其他人建议的那样坚持
mod_rewrite
。也谢谢你,Scott,不过这个解决方案也在向我射击404。。。我不太明白。你被重定向到哪个地址?(你可以使用example.com来保护隐私)据我所知,它根本没有重定向-它仍然只是声明example.com/side.php?id=1仅供参考此规则不起作用-重写规则将与请求的查询字符串部分完全不匹配。是的,我刚刚意识到并正在修复此问题。