我有:
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 :(得分: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
答案 1 :(得分:0)
完整的解决方案:
RewriteCond %{QUERY_STRING} Variable=([A-Za-z]+)$
RewriteRule OldURL/$ /NewURL/%1? [L,R=301]
RewriteRule ^NewUrl/([^/\.]+)$ MappedNewLocationFolder/?Variable=$1 [L]
第1行:检查(名称和数量)参数是否符合预期
第二行:检查参数的基本路径,即OldURL是否正确,301是否为NewUrl
第3行:将NewUrl映射到文件所在的实际位置(未在浏览器中显示)
(第二行末尾的问号消除了附加到NewUrl的变量)