如果不存在,htaccess会忽略

时间:2013-08-29 14:50:21

标签: php regex .htaccess mod-rewrite

我试图使用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 dosent包含任何东西我怎么能阻止它进入404.

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

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

这很好,即使排序中没有任何内容。但是使用重写规则它只需要404错误。

由于

2 个答案:

答案 0 :(得分:0)

你的问题是正则表达式。每组中的+表示“匹配一次或多次”。如果你什么也没有,那就完全不匹配了。因此404.尝试将所有+ s更改为* s。

答案 1 :(得分: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变量非常重要,否则多个//将条带化为单/