【问题标题】:.htaccess - Force urls from 'dir/page.html' → 'dir/page'.htaccess - 从 'dir/page.html' → 'dir/page' 强制 url
【发布时间】:2015-09-06 01:46:35
【问题描述】:

我想删除特定文件类型的所有尾随扩展名(例如删除所有 .html 并保留其他所有内容)

因此,例如,如果用户访问页面<my-site>/how-to/use-git.html,他将被重定向到<my-site>/how-to/use-git(带有或不带有尾随/)。任何其他请求(如<my-site>/how-to/img1.jpg)都将保持原样(<my-site>/how-to/img1.jpg)。

在浏览时,我找不到满足以下条件(两者)的东西:

  • 删除 .html
  • 强制转到没有扩展名的网址

我试过这样的事情

# From http://stackoverflow.com/questions/27553722/htaccess-mod-rewrite-how-to-modify-url-from-pages-pagename-cfm-to-pagename
RewriteEngine On
RewriteBase /

RewriteCond %{THE_REQUEST} \s/+pages/(.+?)\.html[\s?] [NC]
RewriteRule ^ /%1/ [R=302,L,NE]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}/pages/$1\.html -f [NC]
RewriteRule ^(.+?)/?$ pages/$1.html [L]

但它不会强制页面转到没有扩展名的版本。

添加

# From http://www.webweaver.nu/html-tips/web-redirection.shtml
RedirectMatch 301 (.*)\.html$ $1

创建 404 not found 错误。

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite seo


    【解决方案1】:

    您可以在 DOCUMENT_ROOT/.htaccess 文件中使用这些规则:

    RewriteEngine On
    
    # To externally redirect /path/file.html to /path/file
    RewriteCond %{THE_REQUEST} /(.+?)\.html[\s?] [NC]
    RewriteRule ^ /%1 [L,R=302]
    
    ## To internally redirect /path/file to /path/file.html
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME}.html -f
    RewriteRule ^(.+?)/?$ $1.html [L]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      • 2015-01-05
      • 2020-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多