仅在其他规则不适用时才重写规则

时间:2018-03-26 21:11:54

标签: .htaccess redirect

我有以下规则:

Mar 25 00:07:13 64 bytes from 10.11.10.12: icmp_seq=2499 ttl=64 time=0.320 ms
Mar 25 00:07:14 64 bytes from 10.11.10.12: icmp_seq=2500 ttl=64 time=0.324 ms
Mar 25 00:07:15 64 bytes from 10.11.10.12: icmp_seq=2501 ttl=64 time=0.368 ms
Mar 25 00:07:16 64 bytes from 10.11.10.12: icmp_seq=2502 ttl=64 time=0.310 ms
Mar 25 00:07:17 64 bytes from 10.11.10.12: icmp_seq=2503 ttl=64 time=0.351 ms
Mar 25 00:07:18 64 bytes from 10.11.10.12: icmp_seq=2504 ttl=64 time=0.299 ms
Mar 25 00:07:19 64 bytes from 10.11.10.12: icmp_seq=2505 ttl=64 time=0.341 ms
Mar 25 00:07:20 64 bytes from 10.11.10.12: icmp_seq=2506 ttl=64 time=0.290 ms
Mar 25 00:07:21 64 bytes from 10.11.10.12: icmp_seq=2507 ttl=64 time=0.363 ms
Mar 25 00:07:22 64 bytes from 10.11.10.12: icmp_seq=2508 ttl=64 time=0.299 ms
Mar 25 00:07:23 64 bytes from 10.11.10.12: icmp_seq=2509 ttl=64 time=0.336 ms
Mar 25 00:07:24 64 bytes from 10.11.10.12: icmp_seq=2510 ttl=64 time=0.285 ms
Mar 25 00:07:25 64 bytes from 10.11.10.12: icmp_seq=2511 ttl=64 time=0.350 ms
Mar 25 00:07:26 64 bytes from 10.11.10.12: icmp_seq=2512 ttl=64 time=0.319 ms
Mar 25 00:07:27 64 bytes from 10.11.10.12: icmp_seq=2513 ttl=64 time=0.377 ms
Mar 25 00:07:28 64 bytes from 10.11.10.12: icmp_seq=2514 ttl=64 time=0.260 ms
Mar 25 00:08:07 From 10.11.10.1 icmp_seq=2550 Destination Host Unreachable
Mar 25 00:08:07 From 10.11.10.1 icmp_seq=2551 Destination Host Unreachable
Mar 25 00:08:07 From 10.11.10.1 icmp_seq=2552 Destination Host Unreachable
Mar 25 00:08:10 From 10.11.10.1 icmp_seq=2553 Destination Host Unreachable
Mar 25 00:08:10 From 10.11.10.1 icmp_seq=2554 Destination Host Unreachable
Mar 25 00:08:10 From 10.11.10.1 icmp_seq=2555 Destination Host Unreachable
Mar 25 00:08:13 From 10.11.10.1 icmp_seq=2556 Destination Host Unreachable
Mar 25 00:08:13 From 10.11.10.1 icmp_seq=2557 Destination Host Unreachable
Mar 25 00:08:13 From 10.11.10.1 icmp_seq=2558 Destination Host Unreachable
Mar 25 00:08:16 From 10.11.10.1 icmp_seq=2559 Destination Host Unreachable
Mar 25 00:08:16 From 10.11.10.1 icmp_seq=2560 Destination Host Unreachable
Mar 25 00:08:16 From 10.11.10.1 icmp_seq=2561 Destination Host Unreachable
Mar 25 00:08:19 From 10.11.10.1 icmp_seq=2562 Destination Host Unreachable
Mar 25 00:08:19 From 10.11.10.1 icmp_seq=2563 Destination Host Unreachable
Mar 25 00:08:19 From 10.11.10.1 icmp_seq=2564 Destination Host Unreachable
Mar 25 00:08:22 From 10.11.10.1 icmp_seq=2565 Destination Host Unreachable
Mar 25 00:08:22 From 10.11.10.1 icmp_seq=2566 Destination Host Unreachable
Mar 25 00:08:22 From 10.11.10.1 icmp_seq=2567 Destination Host Unreachable
Mar 25 00:08:25 From 10.11.10.1 icmp_seq=2568 Destination Host Unreachable
Mar 25 00:08:25 From 10.11.10.1 icmp_seq=2569 Destination Host Unreachable
Mar 25 00:08:25 From 10.11.10.1 icmp_seq=2570 Destination Host Unreachable
Mar 25 00:08:29 From 10.11.10.1 icmp_seq=2571 Destination Host Unreachable
Mar 25 00:08:29 From 10.11.10.1 icmp_seq=2572 Destination Host Unreachable
Mar 25 00:08:29 From 10.11.10.1 icmp_seq=2573 Destination Host Unreachable
Mar 25 00:08:32 From 10.11.10.1 icmp_seq=2574 Destination Host Unreachable
Mar 25 00:08:32 From 10.11.10.1 icmp_seq=2575 Destination Host Unreachable
Mar 25 00:08:32 From 10.11.10.1 icmp_seq=2576 Destination Host Unreachable
Mar 25 00:08:35 From 10.11.10.1 icmp_seq=2577 Destination Host Unreachable
Mar 25 00:08:38 From 10.11.10.1 icmp_seq=2581 Destination Host Unreachable
Mar 25 00:08:38 From 10.11.10.1 icmp_seq=2582 Destination Host Unreachable
Mar 25 00:08:39 64 bytes from 10.11.10.12: icmp_seq=2583 ttl=64 time=1001 ms
Mar 25 00:08:39 64 bytes from 10.11.10.12: icmp_seq=2584 ttl=64 time=1.34 ms
Mar 25 00:08:40 64 bytes from 10.11.10.12: icmp_seq=2585 ttl=64 time=0.275 ms
Mar 25 00:08:41 64 bytes from 10.11.10.12: icmp_seq=2586 ttl=64 time=0.256 ms
Mar 25 00:08:42 64 bytes from 10.11.10.12: icmp_seq=2587 ttl=64 time=0.263 ms
Mar 25 00:08:43 64 bytes from 10.11.10.12: icmp_seq=2588 ttl=64 time=0.302 ms
Mar 25 00:08:44 64 bytes from 10.11.10.12: icmp_seq=2589 ttl=64 time=0.394 ms
Mar 25 00:08:45 64 bytes from 10.11.10.12: icmp_seq=2590 ttl=64 time=0.355 ms
Mar 25 00:08:46 64 bytes from 10.11.10.12: icmp_seq=2591 ttl=64 time=0.293 ms
Mar 25 00:08:47 64 bytes from 10.11.10.12: icmp_seq=2592 ttl=64 time=0.384 ms
Mar 25 00:08:48 64 bytes from 10.11.10.12: icmp_seq=2593 ttl=64 time=0.319 ms
Mar 25 00:08:49 64 bytes from 10.11.10.12: icmp_seq=2594 ttl=64 time=0.228 ms
Mar 25 00:08:50 64 bytes from 10.11.10.12: icmp_seq=2595 ttl=64 time=0.316 ms
Mar 25 00:08:51 64 bytes from 10.11.10.12: icmp_seq=2596 ttl=64 time=0.281 ms
Mar 25 00:08:52 64 bytes from 10.11.10.12: icmp_seq=2597 ttl=64 time=0.301 ms
Mar 25 00:08:53 64 bytes from 10.11.10.12: icmp_seq=2598 ttl=64 time=0.283 ms
Mar 25 00:08:54 64 bytes from 10.11.10.12: icmp_seq=2599 ttl=64 time=0.232 ms
Mar 25 00:08:55 64 bytes from 10.11.10.12: icmp_seq=2600 ttl=64 time=0.349 ms
Mar 25 00:08:56 64 bytes from 10.11.10.12: icmp_seq=2601 ttl=64 time=0.259 ms
Mar 25 00:08:57 64 bytes from 10.11.10.12: icmp_seq=2602 ttl=64 time=0.297 ms
Mar 25 00:08:58 64 bytes from 10.11.10.12: icmp_seq=2603 ttl=64 time=0.257 ms
Mar 25 00:08:59 64 bytes from 10.11.10.12: icmp_seq=2604 ttl=64 time=0.242 ms
Mar 25 00:09:00 64 bytes from 10.11.10.12: icmp_seq=2605 ttl=64 time=0.332 ms
Mar 25 00:09:01 64 bytes from 10.11.10.12: icmp_seq=2606 ttl=64 time=0.369 ms
Mar 25 00:09:02 64 bytes from 10.11.10.12: icmp_seq=2607 ttl=64 time=0.276 ms
Mar 25 00:09:03 64 bytes from 10.11.10.12: icmp_seq=2608 ttl=64 time=0.370 ms
Mar 25 00:09:04 64 bytes from 10.11.10.12: icmp_seq=2609 ttl=64 time=0.301 ms
Mar 25 00:09:05 64 bytes from 10.11.10.12: icmp_seq=2610 ttl=64 time=0.392 ms
Mar 25 00:09:06 64 bytes from 10.11.10.12: icmp_seq=2611 ttl=64 time=0.313 ms
Mar 25 00:09:07 64 bytes from 10.11.10.12: icmp_seq=2612 ttl=64 time=0.679 ms

现在我想要的是,domain.com<>背后的一切(在<>)重定向到test.php。

我做到了 RewriteRule ^([^ /] +)$ test.php

这是有效的,但是当我输入"错误"或者"家庭"它还重定向到test.php而不是404.php和index.php

3 个答案:

答案 0 :(得分:0)

当找到匹配的条件时,您可以告诉重写它已完成,因此在满足条件时不会继续,因此您的重写可能是这样的:

RewriteEngine On
RewriteBase /
RewriteRule ^error$ 404.php [L,NC]
RewriteRule ^home$ index.php [L,NC]
RewriteRule ^(.*)$ test.php

'L'重写标志告诉重定向这是最后一个条件(即不再看)。 “NC”标志使规则不区分大小写。您可以决定是否还需要包含R = 301标志。

但是,我可以在上面看到一个潜在的问题,因为一旦处理了规则,重写的请求就会被传回URL解析引擎,并且.htaccess文件会再次处理重写的请求。这将导致在第二次通过时接受倒数第二个规则。

替代[END]标志,不仅可以终止当前轮次的重写处理,还可以防止在htaccess上下文中发生任何后续重写处理。如果有效,我会感兴趣的。

希望这有帮助。

答案 1 :(得分:0)

你可以REDIRECT_STATUS这样:

RewriteEngine On
RewriteBase /

RewriteRule ^error/?$ 404.php [L,NC]
RewriteRule ^home/?$ index.php [L,NC]

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^ test.php
在执行一些重写规则后,

REDIRECT_STATUS被设置为非零值(200)。

答案 2 :(得分:0)

试试这个:

RewriteEngine On
RewriteRule ^error$ 404.php 
RewriteRule ^home$ index.php
RewriteCond %{REQUEST_URI} !/(error|home|index|404)
RewriteRule ^([^/]+)$ test.php

问题在于,您已经捕获了错误和主页,但是当他们重定向到404或索引时,它们会被最后一条规则再次捕获,因此您应该将它们排除在最后一条规则之外。