使用htaccess和regex重写旧URL

Mat*_*tt. 5 php regex apache wordpress .htaccess

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

最近彻底改造了网站,我的永久链接结构发生了变化.以前,它是

/%year%/%monthnum%/%postname%.html
Run Code Online (Sandbox Code Playgroud)

现在它是

/%year%/%monthnum%/%postname%/
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是Google存储了所有.html链接.因此,通过Google关注链接的访问者将获得404.

我想要发生的是,只要传入的URL在末尾有.html并且匹配永久链接结构格式,重定向到相同的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/
Run Code Online (Sandbox Code Playgroud)

anu*_*ava 2

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

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]
Run Code Online (Sandbox Code Playgroud)