【问题标题】:RedirectMatch or Rewrite Rule for 301 Redirects of *.html to non-extension path*.html 到非扩展路径的 301 重定向的 RedirectMatch 或重写规则
【发布时间】:2014-03-15 06:45:55
【问题描述】:

我到处搜索,包括 SO,都找不到这个问题的答案:

我想设置一个 301 重定向,这样:

www.mysite.com/some-page.html

重定向到

www.mysite.com/some-page/

我在我的 htaccess 文件(它是一个 WordPress 网站)中使用以下内容:

RewriteEngine On
RedirectMatch 301 (.*)\.html$ $1

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

# END WordPress

问题
如果我访问www.mysite.com/,它会重定向到www.mysite.com/index

(注意:如果我访问www.mysite.com/some-page.html,它确实有效并重定向到www.mysite.com/some-page/

关于如何使这项工作的任何建议?我确定我遗漏了一些明显的东西......

【问题讨论】:

    标签: wordpress .htaccess mod-rewrite redirect


    【解决方案1】:

    RedirectMatch 是 mod_alias 的一部分,RewriteRule 是 mod_rewrite 的一部分。两个模块将在处理管道的不同点应用于相同的 URI。这意味着你不能只告诉 apache 停止它正在做的事情并重定向。无论如何,mod_rewrite 部分仍然会被应用。

    要解决这个问题,只需坚持使用 mod_rewrite 代替:

    RewriteEngine On
    RewriteRule ^(.*)\.html /$1/ [L,R=301]
    
    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    
    # END WordPress
    

    【讨论】:

    • 现象级的。当有人知道他们在做什么时,这看起来很容易,但我没有尝试过完全明白。谢谢!
    猜你喜欢
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    相关资源
    最近更新 更多