.htaccess 301重定向-旧url中的变量

.htaccess 301重定向-旧url中的变量,.htaccess,mod-rewrite,joomla,http-status-code-301,.htaccess,Mod Rewrite,Joomla,Http Status Code 301,我在Joomla网站上有几个URL,它们已经被索引,我需要将它们重定向到一些新页面。旧URL的格式如下所示: 我想把它转到: 我尝试使用: RewriteCond %{QUERY_STRING} ^start=(.*)$ RewriteRule ^/en/wfmenuconfig/family/family-disease/177-category-english$ http://www.www.mydoamin.com/en/family-members/family-disease%1

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

我想把它转到:

我尝试使用:

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]
我在这里尝试了几个答案,但似乎没有任何效果


你知道我下一步该怎么做吗?(我尝试了一个普通的重定向301)

你几乎成功了。您需要从规则的模式中删除前导斜杠,因为从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
bit(两套
www
)。在目标的末尾,您有
家庭疾病%1
,这意味着如果
start=20
,则URL的结尾将显示为:
family-disease20
。是吗?

新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
的情况下进行测试,有关详细信息,请参阅此答案。

如果您只想重定向
http://www.mydomain.com/en/wfmenuconfig/family/family-disease/177-category-english?start=$var
into
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
into
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

我只是想把它扔出去,我也很难让重写规则起作用。我有一个客户端从.asp页面升级到WordPress支持的站点。我要做的就是在htaccess文件的“#BEGIN WordPress”部分之前插入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]
#开始WordPress
重新启动发动机
重写基/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]
#结束WordPress
RewriteCond%{QUERY_STRING}^var=somestring$[NC]
重写规则^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
RewriteCond%{QUERY\u STRING}^var=somestring$[NC]
重写规则^oldpage\.asp$http://www.domain.com/newpage? [R=301,L]
#开始WordPress
重新启动发动机
重写基/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]
#结束WordPress

操作顺序必须重要=)

将您对解决方案的最佳猜测作为起点。我尝试使用:
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更方便感谢您的回复,我尝试使用joomla中的工具,但无法将用户转发到所需的url。我真的不希望重定向url末尾的20。@AndrewMatthews然后删除endHi Jon处的
%1
,感谢您的回复。我试过你的规则,但重定向无效。我还保留了它以检查它是否工作,但仍然没有重定向。@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
into
http://www.mydomain.com/en/family-members/family-disease
或将其重定向到
http://www.mydomain.com/en/family-members/family-disease$var