apache RewriteRule要求在url末尾加斜杠才能起作用

问题描述

| 好的,所以我有一个网址
domain.com/item/item_id/item_description/page
当我键入没有链接
/page
在网址上会引发404错误,我必须在网址上键入斜杠以使其正常工作。 这是我的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]
这有点解决了我的问题,但是如果用户想要添加尾部斜杠,我如何使尾部斜杠成为可选的,所以每次找不到斜杠时都不会重定向     

解决方法

        您可以使用一个重写器来处理请求。 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\"
注意不要在生产中使用此功能。     ,        使用两个重写规则(一个带有\“ 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