Dot-Htaccess
RewriteRules 不以 LAST 標誌停止?
我似乎在使用 Apache 2.2 的 Rewrite 模組(在 FreeBSD 8 上執行)時遇到了問題。我的
.htaccess
文件如下:Options -Indexes RewriteEngine on RewriteRule ^xpaste$ cross.php [L] RewriteRule ^x([a-f0-9]*)$ cross.php?id=$1 [L] RewriteRule ^(gen|[a-f0-9]+)$ index.php?$1 [L] RewriteRule ^(.*)$ index.php [L]
然而不知何故,最後一條規則覆蓋了其他三個規則。一旦我將其註釋掉,其他規則就會按預期工作:
www.example.com/xpaste
打開cross.php
www.example.com/x132633
打開cross.php?id=132633
www.example.com/gen
打開index.php?gen
我在每個 上嘗試了、 和標誌的各種組合
L
,但除非我註釋掉最後一條規則,否則一切都會被定向到. 一旦找到匹配項,如何讓 Apache 停止處理s?NS``S=n``RewriteRule``index.php``RewriteRule
RewriteRule 生成一個 INTERNAL REDIRECT,然後從第一個 RewriteRule 開始重複處理(RewriteRule ^xpaste$ cross.php
$$ L $$)。您需要在最後一個 RewriteRule 之前添加 RewriteCond:
RewriteEngine on RewriteRule ^xpaste$ cross.php [L] RewriteRule ^x([a-f0-9]*)$ cross.php?id=$1 [L] RewriteRule ^(gen|[a-f0-9]+)$ index.php?$1 [L] RewriteCond %{REQUEST_URI} !^/(cross|index)\.php$ RewriteRule ^(.*)$ index.php [L]
最後一條規則的 NS 應該有效。也可以按照其他規則來做,沒有壞處。我要到我正在做的地方'
$$ L,NS $$’,在有 L 的地方添加 NS。
RewriteEngine on RewriteRule ^xpaste$ cross.php [L] RewriteRule ^x([a-f0-9]*)$ cross.php?id=$1 [L] RewriteRule ^(gen|[a-f0-9]+)$ index.php?$1 [L] RewriteRule ^(.*)$ index.php [L,NS]
我還沒有測試過這些,但是這裡還有一個有趣的方法,對於您更通用的解決方案,使用 IS_SUBREQ 變數。 https://stackoverflow.com/questions/9555247/can-anyone-think-of-when-a-sub-request-rewrite-is-useful
這篇文章也提到了 REDIRECT_STATUS 變數。 http://www.webmasterworld.com/apache/4299003.htm