【问题标题】:Redirect multiple dynamic URL to single static URL将多个动态 URL 重定向到单个静态 URL
【发布时间】:2012-07-18 06:20:41
【问题描述】:

我们有多个旧网址,例如:

blog/index.php?d=26&m=12&y=11   
blog/index.php?m=03&y=12&d=22&entry=entry120322-135153
blog/index.php?m=06&y=12&d=&entry=entry120602-191105    
blog/index.php?d=19&m=02&y=12

index.php 后面的逻辑总是 ?d、?m 或 ?y。

我需要将这些全部重定向到:

www.domain.com/blog

我从这里尝试了几种不同的方法,但似乎逻辑混乱。

附录

按照 TerryE 的建议,当我输入链接时

http://www.coreyogaasia.com/blog/index.php?m=12&y=11&d=26&entry=entry111226-110412

在我的浏览器中,它解析为

http://www.coreyogaasia.com/blog/?m=12&y=11&d=26&entry=entry111226-110412

(删除 index.php)。但是,它不会

http://www.coreyogaasia.com/blog

我也把它放在 wordpress 上面:

# BEGIN WordPress 
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase / 
RewriteRule ^index\.php$ - [L] 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule . /index.php [L] 
</IfModule>

【问题讨论】:

  • 为什么不提供一些例子呢?另外,redirectrewrite?
  • 对不起,animuson...不确定您在重定向或重写之间的意思。基本上,所有旧博客页面都已不复存在,因此我需要将所有旧博客地址重定向到主/新博客提要页面。
  • 重定向实际上会导致用户完全重新加载页面并更改为指定的路径,而重写只是在内部将路径重写为其他内容。它们是相似的词,但意思完全不同。
  • 在那种情况下,我认为我需要一个“重定向”?同样,旧页面不再存在。我需要将它们从所有旧页面重定向到新的博客页面。那是对的吗?这会影响他提供的 TerrE 代码吗?
  • 对不起...在上面编辑以显示我所做的...

标签: .htaccess


【解决方案1】:

您需要使用QUERY_STRING条件来查看参数,例如:

RewriteEngine  On
RewriteBase    /

RewriteCond %{QUERY_STRING} ^(d|m|y)=\d
RewriteRule blog/index.php  http://www.domain.com/blog?  [R=302,L]

如果要保留参数,请删除 ?在重定向字符串中。但是,如果你这样做并且目标重定向到同一个目录,那么你需要额外的条件来防止方向循环。

一旦你得到这个工作交换 302 到 301。有关这方面的更多信息,请参阅 Tips for debugging .htaccess rewrite rules

补正后的碰撞请求

如果您在DOCROOT/blog 中有一个.htaccess,那么您需要将其插入到 RewriteBase 下方和第一个 WP cond/rule 上方:

RewriteCond %{QUERY_STRING} ^(d|m|y)=\d
RewriteRule index.php       http://www.domain.com/blog/?  [R=302,L]

【讨论】:

  • 特里,谢谢你的帮助,但是,它似乎不起作用。当我在浏览器中输入链接coreyogaasia.com/blog/… 时,它会解析为coreyogaasia.com/blog/…(删除了 index.php)。但是,它不会转到“coreyogaasia.com/blog”。有什么想法吗?
  • 我也把它放在 wordpress 上面:# BEGIN WordPress RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule 。 /index.php [L]
  • 我已经更新了您的 Q。将复杂代码放入 cmets 并不是一个好主意,因为格式已被删除。如果您想放开查询参数,那么您必须在 RewriteRule 中的标志之前保留最后一个 ?)。
  • 谢谢特里。我在你给我的代码中添加了,留在?如果我把 L 留在里面,我会收到 500 服务器错误。如果我取出 L,那么它会重定向我,但保留查询参数?
  • @user1533776,不,可以撞。刚刚漏网。对不起。今天晚些时候我会看看。我现在正处于中间状态。 :-(
猜你喜欢
  • 2014-07-02
  • 2014-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-08
相关资源
最近更新 更多