【问题标题】:Semantic URLs for static HTML files with .htaccess and mod_rewrite带有 .htaccess 和 mod_rewrite 的静态 HTML 文件的语义 URL
【发布时间】:2010-05-14 17:52:58
【问题描述】:

mod_rewrite 总是让我感到困惑...谁能告诉我获得以下干净 URL 所需的规则?左侧为所需网址,右侧为真实网址。

/our-work/ => /our-work.html
/our-work/some-project/ => /our-work/some-project.html
/contact/ => /contact.html

如您所见,我也想在所有 URL 上强制使用斜杠。

谢谢!

【问题讨论】:

    标签: .htaccess mod-rewrite clean-urls


    【解决方案1】:

    试试这个规则:

    RewriteCond %{REQUEST_FILENAME}.html -f
    RewriteRule ^(.+)/$ $1.html [L]
    

    以及添加斜杠:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule .*[^/]$ %{REQUEST_URI}/ [L,R=301]
    

    确保将那些导致外部重定向的规则(显式使用 R 标志或隐式)放在那些只会导致内部重定向/重写的规则之前。所以在这种情况下:

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule .*[^/]$ %{REQUEST_URI}/ [L,R=301]
    RewriteCond %{REQUEST_FILENAME}.html -f
    RewriteRule ^(.+)/$ $1.html [L]
    

    【讨论】:

    • 谢谢。这适用于顶级 /our-work/ 示例,但最终将我重定向到 /redirect:/our-work/some-project.html.html.html/ 之类的 URL,当我点击像 /our 这样的两个级别的 URL 时-工作/一些项目/。我还应该说,我现在在指定端口的 localhost URL 上使用它。
    • 刚刚在另一个环境中测试过,疯狂的重定向 URL 是来自其他地方的问题,不知道在哪里。非常感谢您的解决方案!
    • @alistair.mp:啊,你说得对。我添加了一个条件来测试重写是否将指向现有文件以避免无限递归。
    猜你喜欢
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多