我正在尝试更改我的.htaccess文件,以便我转到:
http://www.example.com/index.php?login=true
,它转到http://www.example.com/login
。
我目前有这个代码删除了index.php(这使得上面看起来像http://www.example.com/?login=true
)。
RewriteEngine On
#remove index.php
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteCond %{THE_REQUEST} !/system/.*
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,L]
RewriteCond %{THE_REQUEST} ^GET
答案 0 :(得分:0)
我会反过来设置你的重写规则:
RewriteEngine On
RewriteRule ^login$ /index.php?login=true
这样,如果用户浏览http://yourserver.com/login实际使用的页面为http://yourserver.com/index.php?login=true,则第一个网址会显示在浏览器中。我认为这是你想要实现的目标。
如果你真的需要朝着你要求的方向去做,你可以尝试这样的事情:
RewriteEngine on
RewriteCond %{QUERY_STRING} ^login=true$
RewriteRule ^index\.php$ /login [L,R=301]
如果有其他查询参数,则会失败。
如果您想将http://yourserver.com/index.php重定向到http://yourserver.com,只需添加以下重写规则:
RewriteRule ^index\.php$ / [L,R=301]
答案 1 :(得分:0)
以下内容应该有效,但排除/ system / *的行可能有问题。尝试使用已注释掉的测试。
RewriteEngine On
RewriteCond %{QUERY_STRING} ([^=]*)=true [NC]
RewriteCond %{THE_REQUEST} ^/system/.*
RewriteRule index.php /%1? [R=301,L]
以下页面帮助:http://wiki.apache.org/httpd/RewriteQueryString
这个测试人员很酷,但确实有一些错误:http://martinmelin.se/rewrite-rule-tester/
答案 2 :(得分:0)
您需要在RewriteCond中检查QUERY_STRING。我认为应该这样做:
RewriteEngine On
#remove index.php
RewriteCond %{QUERY_STRING} ([^=]*)=true [NC]
RewriteCond %{THE_REQUEST} !/system/.*
RewriteRule ^index\.php /%1? [R=301,L]
这应该将index.php?= true的任何内容重定向到/ action
答案 3 :(得分:0)
在example.com
的根目录中的.htaccess中尝试以下操作RewriteEngine On
RewriteBase /
#rewrite http://www.example.com/anything to http://www.example.com/index.php?anything=true
RewriteCond %{REQUEST_URI} ^/([-a-zA-Z0-9]+)$ [NC]
RewriteCond %1 !system [NC]
RewriteRule . index.php?%1=true [L]
#301 redirect requests for example.com/index.php?anything=true to example.com/anything
RewriteCond %{REQUEST_URI} ^/index\.php$ [NC]
RewriteCond %{QUERY_STRING} ^([^=]+)=true$ [NC]
RewriteRule . /%1? [L,R=301]