我第一次写301重定向..。
目标
我必须重定向任何URL
www.example.com/product/cat/item/product-itemwww.example.com/brand/cat/item/product-itemwww.example.com/cat/item/product-item致:www.example.com/product/item
项可以有像iphone-6-black-3g这样的值(其中有连字符)
htaccess-代码
我做了一个测试项目,在htaccess文件中有以下内容:
RewriteEngine on
RewriteBase /test/
RewriteCond %{ENV:REDIRECT_STATUS} 200 ### i have tested for ^.
RewriteRule ^ - [L]
RewriteRule ^(.+)/([^\-]+)-(.+)/?$ $2/$3.php?cat=$2&item=$3 [L,R=301]如果重定向到test.php?cat=$2&item=$3,则在$2和$3中显示正确的值。
问题
但是如果我把它重定向到$2/$3.php,奇怪的事情就会发生。
因为生成的新URL也满足规则,所以我认为会出现一个循环,一直持续到不再匹配.
为了打破循环,我添加了%{ENV:REDIRECT_STATUS} 200,但它看起来不起作用。
我快疯了..。我想到的唯一解决办法是改变项目格式,如apple_iphone-t等.先下划线后连字符的。这样就没有循环了
善意地建议我们是否可以用连字符模式来解决它?
发布于 2015-08-19 17:28:45
您可以通过添加一些条件来防止循环:
RewriteEngine on
RewriteBase /test/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/([^\-]+)-(.+)/?$ $2/$3.php?cat=$2&item=$3 [L,R=301]%{ENV:REDIRECT_STATUS}不能工作的原因是您正在使用外部重定向。您要重定向浏览器,以便浏览器发送一个全新的请求,因此没有内部重定向使该条件工作。
https://stackoverflow.com/questions/32101380
复制相似问题