2013-04-08 107 views
1

我有一个Joomla网站上的几个网址已被编入索引,我需要301重定向到一些新的网页。旧的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)

+0

安置自己的最佳猜测的解决方案为出发点。 – isherwood 2013-04-08 16:06:35

+0

我试着使用:(。*) '的RewriteCond%{QUERY_STRING} ^开始= $ 重写规则^/EN/wfmenuconfig /家庭/家族疾病/ 177类,英语$ HTTP://www.www .mydoamin.com/en/family-members/family-disease%1 [R = 301,L]' – 2013-04-08 16:08:59

+0

看看这个:[使用.htaccess或工具修改自定义网址](http://stackoverflow.com/questions/ 15634494 /的Joomla-2-5-适应定制的URL与 - htaccess的-或工具/ 15654818#15654818)。比搞乱.htaccess更方便 – 2013-04-09 08:06:11

回答

0

你已经差不多了。

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):从一个htaccess文件应用规则时,您需要从规则的图案去掉前导斜杠,因为它是从URI中删除。在您的目标结束时,您有family-disease%1,这意味着如果start=20那么您的网址的结尾将如下所示:family-disease20。是对的吗?

+0

我真的不想在重定向的url结尾处有20个。 – 2013-04-09 11:16:25

+0

@AndrewMatthews然后删除末尾的'%1' – 2013-04-09 16:23:39

+0

嗨,乔恩,谢谢你的回复。我试过你的规则,重定向不起作用。我也离开它来检查它是否工作,并且仍然没有重定向。 – 2013-04-10 07:50:22

0

新的网址没有查询字符串,所以它只是剥离最后的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

试过这一个,我得到了一个服务器500错误。 – 2013-04-09 11:22:54

+0

@AndrewMatthews请再试一次,因为我已经修改过了。 – 5ervant 2013-04-09 11:28:48

+0

嗨仆人,感谢您的时间,我再次尝试,但它没有奏效。 – 2013-04-09 11:51:03

0

我只是想扔掉那里,我也无法让RewriteRule工作。我有一个客户端从.asp页面升级到WordPress支持的站点。我需要做的是在“#BEGIN WordPress”部分之前将RewriteCond和RewriteRule插入到htaccess文件中。现在它就像它应该那样工作。

这是张贴的方式,但希望它可以帮助其他人在那里遇到同样的问题。

不起作用:

# 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 

操作的顺序一定是重要的=)