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

时间:2013-04-08 15:50:57

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

我在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 :(得分: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。是吗?

答案 1 :(得分: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了解详细信息。

答案 2 :(得分: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,只需确保您的网络服务器有 mod_rewrite

答案 3 :(得分: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

操作顺序必须重要=)

相关问题