首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RewriteCond %{ENV:REDIRECT_STATUS} 200不工作

问RewriteCond %{ENV:REDIRECT_STATUS} 200不工作
EN

Stack Overflow用户
提问于 2015-08-19 16:54:19
回答 1查看 2.5K关注 0票数 0

我第一次写301重定向..。

目标

我必须重定向任何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

项可以有像iphone-6-black-3g这样的值(其中有连字符)

htaccess-代码

我做了一个测试项目,在htaccess文件中有以下内容:

代码语言:javascript
复制
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等.先下划线后连字符的。这样就没有循环了

善意地建议我们是否可以用连字符模式来解决它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-19 17:28:45

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

代码语言:javascript
复制
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}不能工作的原因是您正在使用外部重定向。您要重定向浏览器,以便浏览器发送一个全新的请求,因此没有内部重定向使该条件工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32101380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档