1

我试图使用 htaccess 使我的页面更易于阅读。

我正在转这个网址:

index.php?page=list&console=$1&letter=$2&sort=$3&dorder=$4&page_num=$5 [NC]

进入:

RewriteRule ^roms/([^/\.]+)/([^/\.]+)/([^/\.]+)/([^/\.]+)/([0-9]+)/?$

这是完整的代码:

RewriteRule ^roms/([^/\.]+)/([^/\.]+)/([^/\.]+)/([^/\.]+)/([0-9]+)/?$ /index.php?page=list&console=$1&letter=$2&sort=$3&dorder=$4&page_num=$5 [NC]

如果其中一个变量不存在,我怎么能做到这一点,例如,如果 sort=$3 不包含任何东西,我怎么能阻止它进入 404。

因为如果我使用长 URL 并输入:

/index.php?page=list&console=ABCD&letter=T&sort=&dorder=asc&page_num=5

这很好用,即使 sort 里面什么都没有。但使用重写规则只需要 404 错误。

谢谢

4

2 回答 2

0

你的问题是正则表达式。每组中的 + 表示“匹配一次或多次”。如果你在那里什么都没有,那么它根本无法匹配。因此是 404。尝试将所有 +s 更改为 *s。

于 2013-08-29T15:41:49.410 回答
0

为了使 URL 中的每个部分都是可选的,下面是适用于您的代码:

Options +FollowSymLinks -MultiViews
# Turn mod_rewrite on
RewriteEngine On

RewriteCond %{QUERY_STRING} ^$ [NC]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+roms/([^/\.]*)(?:/([^/\.]*)(?:/([^/\.]*)(?:/([^/\.]*)(?:/([^/]*))?)?)?)?/?[\s?] [NC]
RewriteRule ^ /index.php?page=list&console=%1&letter=%2&sort=%3&dorder=%4&page_num=%5 [L,QSA]

THE_REQUEST在这里使用变量很重要,否则多个//将被条带化为单个/

于 2013-08-29T16:03:32.343 回答