我在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)
答案 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
操作顺序必须重要=)