【问题标题】:Add a possibly missing slash at the end of an URL using htaccess?使用 htaccess 在 URL 末尾添加可能缺少的斜杠?
【发布时间】:2013-07-15 08:20:28
【问题描述】:

我正在使用 htaccess 进行 URL 重写,以这种方式转换 URL:

www.url.com/product.php?id=3

进入

www.url.com/laptops/

我发现当斜线 / 到底存在或不存在时,相对链接的调用方式不同(css文件或图片)。

我在Apple网站上发现,如果你去掉“www.apple.com/mac/”末尾的斜线并回车,斜线会自动重新添加,这就是我愿意。

我尝试了几种我找到的解决方案,例如

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

但是用这个解决方案,如果我把最后的斜线去掉并回车,导航器会“重写”FTP服务器中的确切文件夹位置,导致“找不到文件”错误。

提前感谢您的帮助...

【问题讨论】:

    标签: .htaccess url-rewriting


    【解决方案1】:

    !-f 检查文件是否存在,据我从您的示例中可以看出它不存在,但我认为您重写的其余部分很好。

    RewriteRule ^(.*[^/])$ /$1/ [L,R=301]
    

    但是,在您提供的示例中,您将 products.php?id=3 重定向到笔记本电脑,这是一个非常具体的重写,意味着您必须为每个 url 进行唯一的重写,但是上面的那个会添加您的斜杠为您打开,然后您需要对该确切页面进行内部重写,以将其从笔记本电脑转换为 products.php?id=3。

    【讨论】:

    • 感谢您的快速回答。实际上,我确实对此处的所有“id”进行了特定的重写,并且每次重写都会显示不同的文件夹名称,例如 www.url.com/phones/。我写的示例将在 localhost 上从 localhost/site/phones(删除斜杠)重写为 localhost/phones/(重新添加斜杠,但文件“site”消失了)
    猜你喜欢
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    相关资源
    最近更新 更多