问题描述
|
好的,所以我有一个网址
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