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

时间:2011-06-12 08:52:38

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

好的,我有一个像

这样的网址
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]

哪一种解决了我的问题,但是如果用户想要添加或者不添加它,我怎样才能使尾随斜杠成为用户可选的呢?因此每次没有找到斜杠时它都不会重定向

2 个答案:

答案 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