0

所以我一直坚持这一点,它或多或少地放在我的项目上。

刚开始做一份新工作,我目前的任务是为我们正在启动的一个新项目创建一个 API 系统。它基于 wordpress 的修改版本,我的目标是接受任何发送到 /contrib/api 的请求,而不是将其直接发送到我设置的文件,以整理传入的 URL 并相应地重定向。

这是我目前拥有的:

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteBase /contrib/

    RewriteCond %{REQUEST_URI} ^/api/
    RewriteRule ^/content/apis/apis\.php$ - [L]

    RewriteRule ^index\.php$ - [L]

    # uploaded files -- no longer needed since we're serving files directly via apache
    # RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

    # add a trailing slash to /network and /wp-admin
    RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
    RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin/network$ $1wp-admin/network/ [R=301,L]

    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [L]
    RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) wordpress/$2 [L]
    RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ wordpress/$2 [L]
    RewriteRule . /contrib/index.php [L]
</IfModule>

这一切都在我面前,除了靠近顶部:

RewriteCond %{REQUEST_URI} ^/api/
RewriteRule ^/content/apis/apis\.php$ - [L]

如前所述,我的目标是接受来自 /contrib/api/ 的任何请求并将其重定向到我的文件而不是继续。相反,它似乎跳过并继续指向 wp-admin(我认为是在重定向之后)。无论如何,我的命令似乎没有被抓住,我不知道为什么。

我认为命令是先处理的,但如果它继续下去,将我的代码移到最后会使其工作吗?

我知道这是一件容易测试的事情,但我希望我能对我在做什么/做错有一些了解,而且我还没有访问服务器来实际上传/测试代码而无需通过我的老板,我想 2 周后,让我的老板每 5 分钟测试一次代码可能不是一个好主意,呵呵 :(

编辑:根据 Bob Vale 的通知,修复了路径问题。

4

1 回答 1

1

您不需要,RewriteCond因为无论如何规则都会进行匹配,您只需要

 RewriteRule ^contrib/api/ /content/apis/apis.php [L]

这会将任何以 contrib/api 开头的 url 重写为文件 /content/apis/apis.php

于 2013-08-27T20:54:24.197 回答