【问题标题】:apache RewriteRule requires trailing slash at the end of url to workapache RewriteRule 需要 url 末尾的斜杠才能工作
【发布时间】:2011-09-13 08:15:27
【问题描述】:

好的,我有一个类似的网址

domain.com/item/item_id/item_description/page

当我输入链接时没有

/page

在 url 上它会引发 404 错误,我必须在 url 上键入尾部斜杠才能使其正常工作..

这是我的 htaccess 代码

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^item/([0-9]+)/(.*)/(.*)/?$ item.php?action=item&id=$1&desc=$2&page=$3

我在搜索后找到了这个:

# add trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*[^/]$ /$0/ [L,R=301]

这有点解决了我的问题,但是如果用户想要添加它,我如何让用户可以选择尾部斜杠,这样每次找不到斜杠时它都不会重定向

【问题讨论】:

    标签: apache .htaccess mod-rewrite url-rewriting


    【解决方案1】:

    您可以使用一个重写器来处理请求。

    RewriteRule ^item(?:\.php)/([0-9]+)/([^/]+)?/?([^/]+)?/?$ item.php?action=item&id=$1 &desc=$2&page=$3 [L]

    请注意我在^item 之前添加了(?:\.php),只是为了确保此重写规则有效,如果您的网络服务器出于某种原因转换请求

     domain.com/item/...
    

    进入

     domain.com/item.php/...
    

    提示:您可以查看当前启用 RewriteLog 的重写行为:

    RewriteLogLevel 9
    RewriteLog "/var/log/apache2/dummy-host.example.com-rewrite_log"
    

    注意不要在生产中使用它。

    【讨论】:

      【解决方案2】:

      使用两个重写规则(一个有“page”,一个没有“page”):

      Options +FollowSymLinks
      RewriteEngine On
      RewriteRule ^item/([0-9]+)/(.*)/?$ item.php?action=item&id=$1&desc=$2
      RewriteRule ^item/([0-9]+)/(.*)/(.*)/?$ item.php?action=item&id=$1&desc=$2&page=$3
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-06-27
        • 1970-01-01
        • 2010-11-30
        • 1970-01-01
        • 2012-10-27
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多