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
.hAccess自定义重定向规则与Wordpress重定向规则冲突_Wordpress_.htaccess_Redirect - Fatal编程技术网

.hAccess自定义重定向规则与Wordpress重定向规则冲突

.hAccess自定义重定向规则与Wordpress重定向规则冲突,wordpress,.htaccess,redirect,Wordpress,.htaccess,Redirect,我正在使用相同的域名将我当前的静态站点移动到Wordpress 旧网站和新网站的内容都在根文件夹中,文件名也相同,但在新(Wordpress)网站上,我删除了当前网站上存在的.php扩展名,并按照Wordpress permalinks添加了一个尾部斜杠 因此,我需要重定向所有旧页面(例如): /contact-us.php->/联系我们/ 我已经尝试了一些有详细记录的选项,例如(以及此选项的变体): 但这似乎与Wordpress.htaccess规则相冲突: <IfModule mod_

我正在使用相同的域名将我当前的静态站点移动到Wordpress

旧网站和新网站的内容都在根文件夹中,文件名也相同,但在新(Wordpress)网站上,我删除了当前网站上存在的.php扩展名,并按照Wordpress permalinks添加了一个尾部斜杠

因此,我需要重定向所有旧页面(例如): /contact-us.php->/联系我们/

我已经尝试了一些有详细记录的选项,例如(以及此选项的变体):

但这似乎与Wordpress.htaccess规则相冲突:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L] 
</IfModule>

重新启动发动机
重写基/
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]
当我尝试访问www.site.com/contact-us.php时,我得到一个无限循环或重定向到www.site.com/index(no.php,没有尾随斜杠),Wordpress显示为404页面

我尝试过使用和不使用第一组重写条件(我看到它们在Wordpress规则中是重复的),并且将我的规则放置在Wordpress规则之前和之后。没有快乐。在过去的几个小时里,我也在谷歌上搜索,但似乎没有人解决这个具体问题。我通常通过搜索找到我想要的东西,所以我实际上是在绝望中发布的(这就是为什么这是我的第一篇帖子!)


如果有人能帮上忙,我将不胜感激。

由于php后缀,您在尝试.htaccess重定向时似乎会遇到循环。也许其他人知道解决办法

但是尝试一个名为出于好奇的插件,我尝试了从contact-us.php重定向到contact-us/的方法,效果很好。插件通过php重定向,而不是写入.htaccess,这可能就是区别所在

我一直在使用这个插件来记录404的日志,并做一些重定向。它不会占用太多的站点开销

确保并将选项设置为不进行“URL监控”,因为这将设置自动重定向到手动更改永久链接的帖子/页面。并将404日志记录设置为一两天,因为日志很快就会变大,并生成巨大的数据库表。

尝试使用以下方法:

 <IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteBase /

 #Rewrite /something.php to /something/
 RewriteRule (.*)/(.*)\.php$ $1/$2/ [R=301,L]

 RewriteRule ^index\.php$ - [L]
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule . /index.php [L] 
 </IfModule>

重新启动发动机
重写基/
#将/something.php重写为/something/
重写规则(.*)/(.*)\.php$$1/$2/[R=301,L]
重写规则^index\.php$-[L]
重写cond%{REQUEST_FILENAME}-F
重写cond%{REQUEST_FILENAME}-D
重写规则/index.php[L]
此方法将重写:
/联系我们/test/hello.php
->
/联系我们/test/hello/

如果不想重写子目录,请将第6行替换为:


RewriteRule/(.*)\.php$/$1/[R=301,L]

谢谢,我试过了,但它再次将我发送到/index,并显示404消息。我已经读了很多,很明显问题是Wordpress使用index.php文件作为所有永久链接的“前端控制器”。如果你知道这方面的任何方法,那就太好了——我宁愿使用htaccess文件而不是php重定向。太好了!我实际上也尝试过这个插件和其他插件,但它们对我不起作用——我现在发现这是一个浏览器缓存问题。我用一个正则表达式规则再次设置了重定向,清除了缓存,到目前为止它工作正常。非常感谢你的帮助。
 <IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteBase /

 #Rewrite /something.php to /something/
 RewriteRule (.*)/(.*)\.php$ $1/$2/ [R=301,L]

 RewriteRule ^index\.php$ - [L]
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteRule . /index.php [L] 
 </IfModule>