首页 文章

301重定向 - 旧网址中的变量

提问于
浏览
1

我在Joomla网站上有几个已被编入索引的网址,我需要将它们重定向到一些新页面 . 旧的URL形成如下:

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)

4 回答

  • 0

    你几乎得到了它 . 您需要从规则的模式中删除前导斜杠,因为在从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 ,那么您的网址末尾将如下所示: family-disease20 . 是对的吗?

  • 0

    新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 .

  • 0

    如果您只想将 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/wfmenuconfig/family/family-disease/177-category-english?start=$AnyNumber ,如果它重定向到 http://www.mydomain.com/en/family-members/family-disease ,只需确保您的Web服务器有 mod_rewrite .

  • 0

    我只是想把它扔出去,我也无法让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
    

    操作顺序必须重要=)

相关问题