.htaccess htaccess未重定向url

.htaccess htaccess未重定向url,.htaccess,redirect,.htaccess,Redirect,所以我有点被困在这上面了,这或多或少让我的项目获得了成功 我刚刚开始一项新工作,我目前的任务是为我们正在启动的一个新项目创建一个API系统。它基于wordpress的一个修改版本,我的目标是接收到/contrib/api的任何请求,并将其直接发送到我设置的一个文件,以整理传入的URL并相应地重定向 以下是我目前拥有的: <IfModule mod_rewrite.c> RewriteEngine On RewriteBase /contrib/ Rewri

所以我有点被困在这上面了,这或多或少让我的项目获得了成功

我刚刚开始一项新工作,我目前的任务是为我们正在启动的一个新项目创建一个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>
如上所述,我的目标是从/contrib/api/接收任何请求并将其重定向到我的文件,而不是继续。相反,它似乎跳过并继续指向wp admin(我认为是在重定向之后)。不管怎样,我的命令似乎没有被抓住,我也不知道为什么

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

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


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

您不需要重写COND,因为规则将无论如何进行匹配,您只需要

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

这将把任何以contrib/api开头的url重写到文件/content/api/api.php

好的,实际上,它应该是
RewriteCond%{REQUEST_URI}^/api/RewriteRule^/contrib/api/api\.php$-[L]
我弄乱了文件结构。但是,它不应该尝试转发到文件,但因为找不到文件而失败吗(我的代码不正确)?另外,重写条件不是必须的吗?我只想在url调用API时转发到API,其他所有内容都应移到Wordpress,如下所示?@RhoVisions不,您的规则停止,因为路径不匹配,当不满足条件时,它停止并不执行任何操作。@RhoVisions如果
RewriteRule
已经定义了我更新后的答案所做的匹配。如果目标php文件也在同一个Url下,并且您需要使用rewritecond来显式排除itOk,那么这很有意义,我会在早上的第一件事中尝试一下,谢谢!您的更新后的答案是否与例如,如果有人使用contrib/api/auth?或者我可以使用通配符来匹配吗?@rhovisis这已经是一个通配符了。如果在末尾不使用
$
,这意味着
^contrib/api/
将匹配任何以
contrib/api/
开头的内容,因此
contrib/api/auth
contrib/api/auth/anything
contrib/api/something
都包括在内。
 RewriteRule ^contrib/api/ /content/apis/apis.php [L]