Php 使用htaccess和regex重写旧URL

Php 使用htaccess和regex重写旧URL,php,regex,wordpress,apache,.htaccess,Php,Regex,Wordpress,Apache,.htaccess,我在运行的基于WordPress的网站上遇到了一个问题,关于.htaccess文件中的重写规则 最近对网站进行了彻底检查,我的permalink结构发生了变化。以前是, /%year%/%monthnum%/%postname%.html 现在是了 /%year%/%monthnum%/%postname%/ 我遇到的问题是Google存储了所有的.html链接。因此,通过谷歌追踪链接的访问者将获得404 我希望发生的是,只要传入的URL末尾有.html,并且与permalink结构格式匹配

我在运行的基于WordPress的网站上遇到了一个问题,关于.htaccess文件中的重写规则

最近对网站进行了彻底检查,我的permalink结构发生了变化。以前是,

/%year%/%monthnum%/%postname%.html
现在是了

/%year%/%monthnum%/%postname%/
我遇到的问题是Google存储了所有的.html链接。因此,通过谷歌追踪链接的访问者将获得404

我希望发生的是,只要传入的URL末尾有.html,并且与permalink结构格式匹配,就可以重定向到同一URL,只是不带html扩展名

我尝试将重写规则添加到.htaccess文件中,但遇到无法正常工作的问题。我不确定那是什么问题

RewriteEngine On
RewriteBase /mywebsite.com/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]{4}+)/([0-9]{2}+)/([a-zA-Z0-9-]+).html$ $1/$2/$3/

你很接近,但你的正则表达式有点偏离轨道。试试这个规则:

RewriteEngine On
RewriteBase /mywebsite.com/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([0-9]{4})/([0-9]{2})/(.+?)\.html$ $1/$2/$3/ [L,NC,NE,R=301]

谢谢你的快速回复。我已经实现了你的版本,但它仍然不起作用。问题仍然是页面只加载带有html扩展名的空白。我不确定这是不是由wordpress引起的,我想出来了。在wordpress放置的标准RewriteRule^index\.php$-[L]之后,我有了我的重写规则。因此,我的重写没有被处理。把它移到上面,砰的一声。。它起作用了。谢谢你纠正了我的规则!是的,WP规则必须在这之后,否则该规则将捕获所有请求。很高兴它能为您解决问题。是的,“新”WP表单本身必须在.htaccess中翻译(重写)到服务器和PHP能够理解的表单(/index.PHP?year=yyyy&month=mm&…等)。这将发生在您从“旧”WP格式转换为“新”WP格式之后。因此,您的转换/重写必须在任何其他操作之前进行。顺便说一句,如果您完全理解“旧”格式是什么,也可以直接将其改写为最终的WP“真实”格式。