我试图使用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错误。
由于
答案 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
变量非常重要,否则多个//
将条带化为单/