【问题标题】:Rewrite old URLs using htaccess and regex使用 htaccess 和 regex 重写旧 URL
【发布时间】:2014-01-04 05:38:07
【问题描述】:

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

最近对网站进行了大修,我的永久链接结构发生了变化。以前是

/%year%/%monthnum%/%postname%.html

现在是

/%year%/%monthnum%/%postname%/

我遇到的问题是 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/

【问题讨论】:

    标签: php regex wordpress apache .htaccess


    【解决方案1】:

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

    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 扩展名的空白。不确定这是否是由 w​​ordpress 引起的。
    • 我想通了。在 wordpress 放置的标准 RewriteRule ^index\.php$ - [L] 之后,我有我的重写规则。因此,我的重写没有被处理。把它移到上面然后繁荣……它起作用了。感谢您更正我的规则!
    • 是的 WP 规则需要在此之后,否则该规则会抓取所有请求。很高兴它对你有用。
    • 是的,“新” WP 表单本身必须在 .htaccess 中翻译(重写)为服务器和 PHP 可以理解的表单(/index.php?year=yyyy&month=毫米&...等)。这必须发生在您从“旧”WP 格式转换为“新”格式之后。因此,您的转换/重写必须在 其他任何事情之前发生。顺便说一句,如果您完全理解它是什么,也可以将您的“旧”格式直接重写为最终的 WP“真实”格式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 2015-05-22
    相关资源
    最近更新 更多