7

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

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

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

谢谢!

4

1 回答 1

10

试试这个规则:

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]
于 2010-05-14T18:03:40.900 回答