WordPress 3.3永久链接的重写规则不起作用

时间:2011-12-22 02:57:59

标签: regex apache wordpress mod-rewrite

自升级到WordPress 3.3以来,每次URL都没有按照自己的意愿重定向。 已更改: domain.com/2010/10/postname / 至: domain.com/postname /

    RewriteEngine On
    RewriteBase /

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^/[0-9]{4}/[0-9]{2}/(.+)$ /$1 [NC,R=301,L]

3 个答案:

答案 0 :(得分:1)

问题是由于领先的斜线并且没有使用$ 3

    RewriteEngine On
    RewriteBase /

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([0-9]{4})/([0-9]{1,2})/(.+)$ /$3 [NC,R=301,L]

答案 1 :(得分:1)

如果要将永久链接更改为/%postname%/ structure,可以使用此脚本生成.htaccess规则。

http://yoast.com/change-wordpress-permalink-structure/

我的固定链接与您的完全相同,我使用此工具更改它们并且运行良好。

答案 2 :(得分:0)

如果先前的规则匹配,则永远不会应用最后一条规则。假设 http://domain.com/2010/10/postname/ 请求与文件或目录不匹配,RewriteRule . /index.php [L]将重写URI为{ {1}}因此它永远不会达到你的规则。尝试将规则上移到/index.php下方的顶部,并复制!-f /! - d条件,使其如下所示:

RewriteBase /

此外,如果它位于.htaccess文件中,则需要删除规则匹配中的前导斜杠,使其如下所示:RewriteBase / # for 301 redirect RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^/[0-9]{4}/[0-9]{2}/(.+)$ /$1 [NC,R=301,L] # the rest of the rules RewriteRule ^atom.xml$ feed/ [NC,R=301,L] RewriteRule ^rss.xml$ feed/ [NC,R=301,L] RewriteRule ^rss2.xml$ feed/ [NC,R=301,L] RewriteCond %{HTTP_USER_AGENT} !FeedBurner [NC] RewriteCond %{HTTP_USER_AGENT} !FeedValidator [NC] RewriteRule ^feed/?([_0-9a-z-]+)?/?$ http://feeds.feedburner.com/handle [R=302,NC,L] RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]