RewriteCond %{ENV:REDIRECT_STATUS} 200 不工作
RewriteCond %{ENV:REDIRECT_STATUS} 200 Not Working
第一次写301重定向...
Objective
我必须重定向任何 URL
www.example.com/product/cat/item/product-item
www.example.com/brand/cat/item/product-item
www.example.com/cat/item/product-item
至: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}
不起作用的原因是您使用了外部重定向。您正在重定向浏览器,因此浏览器会发送一个 全新请求 ,因此没有内部重定向可以使该条件生效。
第一次写301重定向...
Objective
我必须重定向任何 URL
www.example.com/product/cat/item/product-item
www.example.com/brand/cat/item/product-item
www.example.com/cat/item/product-item
至: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}
不起作用的原因是您使用了外部重定向。您正在重定向浏览器,因此浏览器会发送一个 全新请求 ,因此没有内部重定向可以使该条件生效。