1

我在 Joomla 网站上有几个已编入索引的 url,我需要 301 将它们重定向到一些新页面。旧 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 重定向动态网址

301 基于 .htaccess 中的 GET 变量重定向 URL

有什么想法我接下来应该尝试什么?(我尝试过正常的重定向 301)

4

4 回答 4

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,请参阅此答案提示调试 .htaccess 重写规则

于 2013-04-08T18:25:38.643 回答
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您的 URL 的末尾看起来像:family-disease20。那正确吗?

于 2013-04-08T17:19:04.780 回答
0

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

于 2013-04-08T18:58:09.417 回答
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

操作顺序必须很重要 =)

于 2013-08-12T15:20:39.417 回答