【问题标题】:301 Redirect - variable in the old url301 重定向 - 旧网址中的变量
【发布时间】:2013-03-30 19:12:22
【问题描述】:

我在 Joomla 网站上有几个 url 已被索引,我需要 301 将它们重定向到一些新页面。旧网址的格式如下:

http://www.mydomain.com/en/wfmenuconfig/family/family-disease/177-category-english?start=20

我希望它转到:

http://www.mydomain.com/en/family-members/family-disease

我尝试使用:

RewriteCond %{QUERY_STRING} ^start=(.*)$
RewriteRule ^/en/wfmenuconfig/family/family-disease/177-category-english$ http://www.www.mydoamin.com/en/family-members/family-disease%1 [R=301,L]

我在这里尝试了几个答案,但似乎没有任何效果。

htaccess 301 redirect dynamic url

301 Redirecting URLs based on GET variables in .htaccess

任何想法我接下来应该尝试什么? (我试过正常的重定向 301)

【问题讨论】:

  • 发布您对解决方案的最佳猜测作为起点。
  • 我尝试使用:RewriteCond %{QUERY_STRING} ^start=(.*)$ RewriteRule ^/en/wfmenuconfig/family/family-disease/177-category-english$ http://www.www.mydoamin.com/en/family-members/family-disease%1 [R=301,L]
  • 看看这个:Adapting Custom URLs with .htaccess or tool。比乱用 .htaccess 更方便
  • 感谢您的回复,我尝试在 joomla 中使用该工具,但无法将用户转发到所需的网址。

标签: .htaccess mod-rewrite joomla http-status-code-301


【解决方案1】:

我只是想把它扔出去,我也很难让 RewriteRule 工作。我有一个从 .asp 页面升级到 WordPress 支持的站点的客户端。我必须做的是在“# BEGIN WordPress”部分之前的 htaccess 文件中插入 RewriteCond 和 RewriteRule。现在它可以正常工作了。

这篇文章发布得太晚了,但希望它可以帮助其他遇到同样问题的人。

不起作用:

# 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>

# END WordPress
RewriteCond %{QUERY_STRING} ^var=somestring$ [NC]
RewriteRule ^oldpage\.asp$ http://www.domain.com/newpage? [R=301,L]

有效:

RewriteCond %{QUERY_STRING} ^var=somestring$ [NC]
RewriteRule ^oldpage\.asp$ http://www.domain.com/newpage? [R=301,L]
# 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>

# END WordPress

操作顺序必须很重要 =)

【讨论】:

    【解决方案2】:

    如果您只想将http://www.mydomain.com/en/wfmenuconfig/family/family-disease/177-category-english?start=$var 重定向到http://www.mydomain.com/en/family-members/family-disease,那么您必须尝试以下指令:

    # once per .htaccess file
    Options +FollowSymlinks
    RewriteEngine on
    
    RewriteCond %{QUERY_STRING} start=([0-9]*)
    RewriteRule ^en/wfmenuconfig/family/family-disease/177-category-english /en/family-members/family-disease [R=301,L]
    

    但如果这不是你想要的,而是将http://www.mydomain.com/en/wfmenuconfig/family/family-disease/177-category-english?start=$var 重定向到http://www.mydomain.com/en/family-members/family-disease$var,那么你可以检查这个:

    # once per .htaccess file
    Options +FollowSymlinks
    RewriteEngine on
    
    RewriteCond %{QUERY_STRING} start=([0-9]*)
    RewriteRule ^en/wfmenuconfig/family/family-disease/177-category-english /en/family-members/family-disease%1 [R=301,L]
    

    现在,如果可行,请再试一试。如果不是,请找出任何可疑的为什么此代码不起作用:

    Options +FollowSymlinks
    RewriteEngine on
    RewriteBase /en/
    
    RewriteCond %{QUERY_STRING} start=([0-9]*)
    RewriteRule ^wfmenuconfig/family/family-disease/177-category-english /family-members/family-disease [R]
    

    如果它重定向到http://www.mydomain.com/en/family-members/family-disease,请转到http://www.mydomain.com/en/wfmenuconfig/family/family-disease/177-category-english?start=$AnyNumber,只需确保您的网络服务器具有mod_rewrite

    【讨论】:

    • @AndrewMatthews 请再试一次,因为我已经修改过了。
    • 您好仆人,感谢您的宝贵时间,我又试了一次,但还是不行。
    • @AndrewMatthews /en/wfmenuconfig/family/family-disease/177-category-english 所在的确切文件夹是什么?为什么它没有文件扩展名,例如 .php?
    • en 是 joomla 分配给 url 的语言代码。 url 设置为 sef,因此 joomla 会从中删除扩展名。
    • @AndrewMatthews 你想做什么?将http://www.mydomain.com/en/wfmenuconfig/family/family-disease/177-category-english?start=$var 重定向到http://www.mydomain.com/en/family-members/family-disease 或将其重定向到http://www.mydomain.com/en/family-members/family-disease$var
    【解决方案3】:

    新 URL 中没有查询字符串,因此它只是剥离了最后一个 URL 路径部分。如果你想硬编码

    RewriteCond %{QUERY_STRING} ^start=
    RewriteRule ^en/wfmenuconfig/family/family-disease/177-category-english$ /en/family-members/family-disease? [R,L]
    

    或者更灵活一点

    RewriteCond %{QUERY_STRING} ^start=
    RewriteRule ^en/wfmenuconfig/family/family-disease/.+$ /en/family-members/family-disease? [R,L]
    

    或者如果你只想在en/wfmenuconfig之后保持两个级别

    RewriteCond %{QUERY_STRING} ^start=
    RewriteRule ^en/wfmenuconfig/(.+?/.+?)/ /en/$1? [R,L]
    

    切勿在启用301 的情况下进行测试,有关详细信息,请参阅此答案Tips for debugging .htaccess rewrite rules

    【讨论】:

      【解决方案4】:

      你几乎得到它。您需要从规则模式中删除前导斜杠,因为在从 htaccess 文件应用规则时,它已从 URI 中删除:

      RewriteCond %{QUERY_STRING} ^start=(.*)$ 
      RewriteRule ^en/wfmenuconfig/family/family-disease/177-category-english$ /en/family-members/family-disease%1? [R=301,L]
      

      您也不需要http://www.www.mydoamin.com 位(2 组www)。在您的目标末尾,您有family-disease%1,这意味着如果start=20,那么您的URL 的末尾将类似于:family-disease20。对吗?

      【讨论】:

      • 我真的不想要重定向网址末尾的 20。
      • @AndrewMatthews 然后删除末尾的%1
      • 您好乔恩,感谢您的回复。我已经尝试了您的规则,但重定向不起作用。我还让它打开以检查它是否正常工作,但仍然没有重定向。
      猜你喜欢
      • 2016-09-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-28
      • 2014-10-22
      • 2016-05-19
      • 2013-10-16
      • 2017-01-10
      • 1970-01-01
      相关资源
      最近更新 更多