apache - htaccess 文件中 RewriteRules 的顺序

标签 apache .htaccess mod-rewrite

在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/

相关文章:

PHP 系列适用于 Windows,但不适用于 Linux

php - 有人通过 .htaccess 连接后如何检索用户名?

apache - 使用.htaccess重定向主域但不重定向某些子域

php - 使用 htaccess 的 PHP 中的 SEO 友好 URL

.htaccess - 当 '/folder/index.html' 被剥离时,如何删除 'index.html' 的尾部斜杠?

java - Apache log4j 2.3 从另一个文件获取日志文件路径

php - 使用 htaccess 重定向/重写

linux - .htaccess 文件在 apache 上不起作用

regex - 有关 htaccess 的书籍

.htaccess - 具有不同参数的 htaccess