【问题标题】:.htaccess rewrite optional trailing slash.htaccess 重写可选的斜杠
【发布时间】:2014-09-13 15:06:49
【问题描述】:

我目前的网站不包括 .html,在 .htaccess 中使用以下代码:

Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]

这很好用,但如果我添加一个斜杠,我会得到 404。

我想选择让它像现在一样工作,如果我在末尾添加一个斜杠。

这可能吗?

谢谢

【问题讨论】:

    标签: regex apache .htaccess mod-rewrite rewrite


    【解决方案1】:

    当然可以使用:

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

    【讨论】:

    • 感谢您的快速响应......所以现在当我添加尾部斜杠时,它会忽略我的 CSS 扭曲页面......如果我取出斜杠它工作正常。有什么想法吗?
    • 这是由于您使用了 css/js/images 的相对路径。只需在您的 css、js、图像文件中使用绝对路径,而不是相对路径。这意味着您必须确保这些文件的路径以http:// 或斜杠/ 开头。您也可以尝试在页面的 HTML 标头中添加:<base href="/" />,以便从该 URL 而非当前 URL 解析每个相对 URL。
    • 另一个您可以帮助我的快速问题...我不再能够获取我的自定义 404 页面,现在出现 500 内部服务器错误。你知道怎么加回来吗?
    • 我添加了这个:ErrorDocument 404 /oops.html 但每当我得到一个不存在的页面时,我都会收到 500 Internal Server Error
    • @anubhava in regexp pattern ^(.+?)/?$ 为什么在这里使用第一个 ?(+ 号之后)?它的字面意思是什么?
    猜你喜欢
    • 2014-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多