好的,我有一个像
这样的网址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]
哪一种解决了我的问题,但是如果用户想要添加或者不添加它,我怎样才能使尾随斜杠成为用户可选的呢?因此每次没有找到斜杠时它都不会重定向
答案 0 :(得分:1)
您可以使用一个重写来处理请求。
RewriteRule ^item(?:\.php)/([0-9]+)/([^/]+)?/?([^/]+)?/?$ item.php?action=item&id=$1&desc=$2&page=$3 [L]
请注意我在(?:\.php)
之前添加了^item
,以确保此重写符号有效,如果您的网络服务器由于某种原因转换请求
domain.com/item/...
进入
domain.com/item.php/...
提示:您可以看到启用RewriteLog的当前重写行为:
RewriteLogLevel 9
RewriteLog "/var/log/apache2/dummy-host.example.com-rewrite_log"
小心不要在生产中使用它。
答案 1 :(得分:0)
使用两个重写规则(一个有一个,一个没有“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