Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.htaccess htaccess和URL重写_.htaccess_Mod Rewrite_Url Rewriting - Fatal编程技术网

.htaccess htaccess和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自定义的帖子类型栏里,所以我的大脑不能正常工作

我有一个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自定义的帖子类型栏里,所以我的大脑不能正常工作。任何帮助都将不胜感激

编辑:澄清

当前我的.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?