如果所有其他规则都失败,htaccess 如何重定向?

Rya*_*van 2 htaccess mod-rewrite

htaccess 一直给我的问题。每次我认为我理解它时,htaccess 与我认为我理解的相反。任何帮助将不胜感激。

我想用 htaccess 做的是重定向 URI,例如:

www.example.com/get/something to  www.example.com/get.php/something
www.example.com/cape/something  to www.example.com/active.php/something
Run Code Online (Sandbox Code Playgroud)

和其他一群人一起。我的工作很好,我没有工作的是,如果这些规则都不满足,则重定向到我的主域。因此,如果我最终得到www.example.com/anythingThatIsNotDefined/anything的 URI或只是www.example.com/anythingThatIsNotDefined,我想将其重定向到http://www.anotherexample.com

这是我无法开始工作的最后一部分。我当前的 htaccess 文件是:

RewriteEngine On
RewriteRule ^get/(.*)$ /get.php/$1 [L]
RewriteRule ^skin/(.*)$ /active.php/$1 [L]
RewriteRule ^cape/(.*)$ /active.php/$1 [L]
Run Code Online (Sandbox Code Playgroud)

我需要修改什么才能让任何不是 get 或 skin 或 Cape 的东西重定向到我的其他域?

我需要添加的不仅仅是获取、皮肤和斗篷,但是一旦我开始工作,我应该能够轻松添加更多内容

提前致谢,这真的让我很难过。

(如果这不是正确的堆栈站点,我很抱歉,这里和溢出之间是 50/50 的折腾。我不确定它属于哪个。)

Gar*_*ett 6

.htaccess使用 order 来确定首先发生什么(所有 Apache 配置文件也是如此)。在您的情况下,您只需要将所有“特殊”重写规则放在像下面这样的包罗万象的规则之前。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://www.otherdomain.com/$1 [R=301,L]
Run Code Online (Sandbox Code Playgroud)

这个规则基本上是说对于任何不作为硬资源(文件或目录)存在的东西,将请求重定向到http://www.otherdomain.com,包括 URI 字符串。假设这是在您的友好 URL 重定向之后发生的,它们将不会被捕获。