在htaccess文件中,重写规则是否必须遵循顺序?比如,长的在前,短的在后,或者类似的事情?或者,可以按任何顺序排列它们吗?我只有一些规则,例如下面的规则(大约 20 条),但这都是一团糟。
RewriteRule ^/?(backend)/(users)/(new|blocked)/([a-z0-9]+)/?$ /blah/users/index.php?type=$2&case=$3&offset=$4 [NC,L]
最佳答案
重写规则的顺序在.htaccess
中非常重要。您需要将最具体的规则放在顶部,将最通用(包罗万象)的类型规则放在最后。
让我通过例子来展示它。假设您想隐藏所有有效 .php
文件的 .php
扩展名,但希望将其余文件转发到 index.php,那么您需要首先编写 PHP 隐藏规则,例如这个:
# first try loading PHP file if available
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^ %{REQUEST_URI}.php [L,NC]
# not available then send it to /index.php?file=<file>
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php?file=%{REQUEST_URI}.php [L,QSA]
关于apache - htaccess 文件中 RewriteRules 的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19244011/