.htaccess重写,如果没有指定

时间:2017-03-22 20:51:08

标签: .htaccess mod-rewrite

我正在尝试根据端点之后的输入修改我的.htaccess文件以链接到三个不同的位置:

  1. “/ api” - 链接到API
  2. “/ ABCD123” - 如果是7个字符 字母数字字符串,指向特定页面的链接
  3. “/” - 如果未指定任何内容,或任何其他输入链接到主页。
  4. 这是我的.htaccess文件:

    Options -Indexes
    
    RewriteEngine On
    
    RewriteRule ^api/(.*) ./api/index.php [R,L]
    RewriteRule ^([a-zA-Z0-9]{7})$ index.php?l=$1 [L]
    RewriteRule ^(.+)$ everythingelse.php [L]
    

    即使我指定了[L]标志,我似乎总是被重定向到everythingelse.php路由,即使我有7个字符串。

    如何重写才能正确匹配?

1 个答案:

答案 0 :(得分:1)

您的规则不止一次循环和执行。 L标志仅断开当前循环,但mod_rewrite可以再循环并执行所有匹配规则。

Options -Indexes
RewriteEngine On

# skip all files and directories from rewrite rules below
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ - [L]

RewriteRule ^api/(.*)$ /api/index.php [R,L]

RewriteRule ^([a-zA-Z0-9]{7})$ index.php?l=$1 [L,QSA]

RewriteRule . everythingelse.php [L]