.htaccess htaccess和URL重写
我有一个URL列表,例如.htaccess htaccess和URL重写,.htaccess,mod-rewrite,url-rewriting,.htaccess,Mod Rewrite,Url Rewriting,我有一个URL列表,例如 http://www.mywebsite.com/page.php?genus=A_GENUS&species=A_SPECIES&id=12345 我想写一个.htaccess,它会将访问此形式URL的访问永久重定向到以下URL http://www.mywebsite.com/species/A_GENUS/A_SPECIES 不必手动在数据库中列出每个物种,是否可以做到这一点 我试着去查,但我的脑袋在WordPress自定义的帖子类型栏里,所以我的大脑不能正常工作
http://www.mywebsite.com/page.php?genus=A_GENUS&species=A_SPECIES&id=12345
我想写一个.htaccess,它会将访问此形式URL的访问永久重定向到以下URL
http://www.mywebsite.com/species/A_GENUS/A_SPECIES
不必手动在数据库中列出每个物种,是否可以做到这一点
我试着去查,但我的脑袋在WordPress自定义的帖子类型栏里,所以我的大脑不能正常工作。任何帮助都将不胜感激
编辑:澄清
当前我的.htaccess完全为空。我正在重新编写我的网站,以使用全新的CMS和这种新的URL格式。旧的URL格式将不再存在,但所有信息仍将被使用
我们在谷歌上对很多物种都有很高的排名,我希望那里的访问者能够查看他们需要的信息,尽管URL格式发生了变化
这些更改还没有发生(新版本的站点仍然使用沙箱环境),我想在新版本“上线”之前对URL进行更改
编辑2:新站点。htaccess
新站点的.htaccess的全部内容如下所示:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /sandboxfolder/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /sandboxfolder/index.php [L]
</IfModule>
# END WordPress
#开始WordPress
重新启动发动机
重写基本/沙盒文件夹/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/sandboxfolder/index.php[L]
#结束WordPress
编辑Garmen的答案
RewriteEngine On
RewriteBase /sandboxfolder/
RewriteCond %{QUERY_STRING} genus=([a-zA-Z0-9-]+)&species=([a-zA-Z0-9-]+)
RewriteRule ^profile.php$ /species/%1/%2 [R=302]
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /sandboxfolder/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /sandboxfolder/index.php [L]
</IfModule>
# END WordPress
重新编写引擎打开
重写基本/沙盒文件夹/
重写cond%{QUERY_STRING}属=([a-zA-Z0-9-]+)&种=([a-zA-Z0-9-]+)
重写规则^profile.php$/species/%1/%2[R=302]
#开始WordPress
重新启动发动机
重写基本/沙盒文件夹/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/sandboxfolder/index.php[L]
#结束WordPress
不确定我是否正确地使用了RewriteBase,但无论是否使用它,它似乎都无法正常工作
问候,
RewriteEngine On
RewriteCond %{QUERY_STRING} genus=([a-zA-Z0-9-]+)&species=([a-zA-Z0-9-]+)
RewriteRule ^page.php$ /species/%1/%2? [L,R=302]
这一个假设查询字符串参数的顺序非常特定。因此,请注意。此外,它假定名称仅包含普通字母、数字或破折号
完成测试后,将302更改为301。我使用302是因为浏览器会主动缓存301,这使得调试非常困难
编辑:您应该将此规则添加到现有的其他重写规则之上,否则它将不起作用
编辑2:在末尾添加一个
?
,以删除查询字符串。和L
标志以防止进一步执行。您的htaccess当前包含哪些内容?旧的url仍然有效吗?新的url已经被重写(内部)为旧的吗?对不起,Gerben,我会相应地更新我的帖子。新的CMS不会使用任何htaccess吗?在旧站点上创建链接时,url参数是否始终按此顺序排列?新CMS将使用htaccess,是的。我将再次更新我的帖子:)旧网站上的URL总是采用这种格式,是的。问清楚的问题和回答问题一样困难:)请参阅下面的答案,我希望这在我脑海中是有意义的,看起来很完美!我现在就去试一试。非常感谢你的帮助,格本-一旦我有了一个剧本,我会确保你得到正确的答案:)嗨,格本。它确实有效,但它在URL上添加了额外的信息:/species/Parasphaerichthys/lineatus?genus=Parasphaerichthys&species=lineatus&id=1565
此外,当使用我的WordPress规则时,代码似乎根本不起作用。这是因为WordPress正在将所有不是“index.php”的文件重新写入索引页面吗?尽管如此,我还是按照您的指示将代码置于这些规则之上,但WordPress规则似乎仍然优先。我将更新我的原始帖子,向您展示我编写.htaccess的方式,以防出错。位置正确,但我注意到您使用的是profile.php
而不是page.php
。尝试添加L标志:[L,R=302]
哦,Garben,还有一件事:这些URL区分大小写吗?i、 e.如果我有Parasphaerichthys
,这是否适用于/Parasphaerichthys/重写,或者这取决于我的CMS?