2012-07-26 118 views
1

我有:如何重写URL和301重定向一起工作

RewriteRule ^page/([^/\.]+)/?$ index.php?page=$1 [L] 

指向page/([^/\.]+)/?index.php?page=$1

当我去page/([^/\.]+)/,我不希望看到的index.php

(从上面的实现)对于反向,当我去到index.php,我看一个可见的301重定向到page/([^/\.]+)/

如何在不造成无限循环的情况下执行此操作?还是仅依赖于规范标记?

更新:

我得到它发生在一个方向(从新到旧),而不是其他的(从旧到新)

RewriteRule ^([^/\.]+)-yum/?$ yum/?x=$1 [L] 
RewriteRule ^([^/\.]+)/([^/\.]+)-yum/?$ yum/?x=$2&y=$1 [L] 

回答

0

你需要做对%{THE_REQUEST}检查变量,以便你改写当实际的请求是index.php文件:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\?page=([^&]+)([^\ ]*) 
RewriteRule ^/?index\.php$ /page/%1/?%2 [L,R=301] 

因此,如果浏览器请求http://yourdomain.com/index.php?page=qwe&someother=var

应该重定向到:http://yourdomain.com/page/qwe/?someother=var

+0

无法得到这个工作,它是否在两个方向工作,当page/qwe /实际上映射到index.php – bcm 2012-07-30 05:12:35

+0

@bcm这只有它有一个方向,当有人请求'index.php'时,你仍然需要你在另一个方向上工作的东西 – 2012-07-30 05:14:34

0

完整的解决方案在这里:

RewriteCond %{QUERY_STRING} Variable=([A-Za-z]+)$ 
RewriteRule OldURL/$ /NewURL/%1? [L,R=301] 
RewriteRule ^NewUrl/([^/\.]+)$ MappedNewLocationFolder/?Variable=$1 [L] 

第一行:检查(名称及数量)参数如预期的那样

第二行: Check bas参数(一个或多个)电子的路径,这是OLDURL是正确的,301 NEWURL

第三行:地图NEWURL实际位置,其中文件位于(在浏览器中未显示)

(问号就在第二行的结尾去掉变量追加到NewUrl)