RewriteCond %{ENV:REDIRECT_STATUS} 200 不工作

RewriteCond %{ENV:REDIRECT_STATUS} 200 Not Working

第一次写301重定向...

Objective

我必须重定向任何 URL

至:www.example.com/product/item

item 可以有类似 iphone-6-black-3g 的值(其中有连字符)

htaccess 代码

我做了一个测试工程,在htaccess文件中如下:

RewriteEngine on
RewriteBase /test/

RewriteCond %{ENV:REDIRECT_STATUS} 200 ### i have tested for ^.
RewriteRule ^ - [L]

RewriteRule ^(.+)/([^\-]+)-(.+)/?$  /.php?cat=&item= [L,R=301]

如果我重定向到 test.php?cat=&item=,它会在 </code> 和 <code> 中显示正确的值。

问题

但是如果我将它重定向到 /.php 会发生奇怪的事情。

由于生成的新 URL 也满足规则所以我认为会发生循环 继续,直到没有更多匹配....

为了打破循环,我添加了 %{ENV:REDIRECT_STATUS} 200,但它似乎不起作用。

我快疯了...我想到的唯一解决方案是更改 item 格式,例如 apple_iphone-t 等...首先是下划线,然后是连字符.这样就没有循环

请问能否用连字符模式解决?

您可以通过添加一些条件来防止循环:

RewriteEngine on
RewriteBase /test/

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/([^\-]+)-(.+)/?$  /.php?cat=&item= [L,R=301]

%{ENV:REDIRECT_STATUS} 不起作用的原因是您使用了外部重定向。您正在重定向浏览器,因此浏览器会发送一个 全新请求 ,因此没有内部重定向可以使该条件生效。