apache RewriteRule需要在url末尾使用尾部斜杠才能工作

fxu*_*ser 6 apache .htaccess mod-rewrite url-rewriting

好吧,我有一个像你的网址

domain.com/item/item_id/item_description/page
Run Code Online (Sandbox Code Playgroud)

当我输入链接时没有

/page
Run Code Online (Sandbox Code Playgroud)

在网址上它抛出404错误,我必须在网址上键入尾部斜杠才能使其正常工作..

这是我的htaccess代码

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

我搜索后发现了这个:

# add trailing slash
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*[^/]$ /$0/ [L,R=301]
Run Code Online (Sandbox Code Playgroud)

哪种方式解决了我的问题,但是如果用户想要添加或者不添加它,我如何使尾部斜杠成为可选的,这样每次都找不到斜杠时它不会重定向

fre*_*dev 1

您可以使用一个重写规则来处理该请求。

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

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

 domain.com/item/...
Run Code Online (Sandbox Code Playgroud)

进入

 domain.com/item.php/...
Run Code Online (Sandbox Code Playgroud)

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

RewriteLogLevel 9
RewriteLog "/var/log/apache2/dummy-host.example.com-rewrite_log"
Run Code Online (Sandbox Code Playgroud)

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