【问题标题】:Add a trailing slash mod_rewrite添加尾部斜杠 mod_rewrite
【发布时间】:2012-09-25 06:07:59
【问题描述】:

只是想知道如何使用 Mod_Rewrite 在 URL 末尾添加斜杠?

这是我目前的 .htaccess 文件:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]*)$ index.php?pageName=$1

我的网址显示如下:

www.******.com/pageName

我希望它显示如下:

www.******.com/pageName/

该 URL 在内部持有一个 GET 请求,但我希望它看起来像一个真正的目录。

【问题讨论】:

    标签: linux apache mod-rewrite centos


    【解决方案1】:

    您可以轻松地在客户端看到的 URL 中添加尾部斜杠,但您必须考虑重定向浏览器后收到的请求中的尾部斜杠。

    所以重定向可能看起来像这样:

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

    你会想要它在上面:

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^([^/]*)$ index.php?pageName=$1
    

    规则集,因为重定向需要在路由到index.php 之前发生。请注意,当浏览器被重定向到以 / 结尾的 URL 时,您的 index.php 规则将包含 pageName 参数,其中包含一个斜杠。

    【讨论】:

    • 是的,这行得通,但现在的问题正是你所说的,GET 现在在实际值中包含斜线:/ 任何想法如何让它变得肤浅?
    【解决方案2】:

    我知道这是旧的,但它仍然对其他找到它的人有用。

    Jon Lin 的回答是正确的,我会将此作为评论添加,但我没有足够的声誉。

    OP 评论删除尾部斜杠,因为你知道它的末尾总是有一个斜杠,你可以$pageName = substr($pageName, 0, -1);。这就是我至少正在做的事情。

    希望这是有用的。

    【讨论】:

    • 我说我想添加尾部斜杠,而不是删除它们。此外,这仅在斜杠包含在数据库记录中时才有效。我正在做的方式要求您使用 apache 使用 mod_rewrite,与 PHP mate 无关,因为我们正在重写 URL 显示获取请求的方式。
    猜你喜欢
    • 2011-05-31
    • 2015-02-06
    • 1970-01-01
    • 2018-11-18
    • 2012-08-03
    • 2012-07-06
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多