有两件事情,我想用.htaccess文件来实现。 第一个是
www.hostname.com/index.php?question -> www.hostname.com/question www.hostname.com/index.php?myinfo -> www.hostname.com/myinfo www.hostname.com/index.php?notification -> www.hostname.com/notification
所以我使用外部重写来重新表示URL如下。
RewriteCond %{THE_REQUEST} /(index.php)\?([^&]+)\ HTTP RewriteRule ^ /%2? [R=301,L]
现在上面的语句正确显示,因为我想。 问题是在条件满足时内部转换回来。 条件是如果%{THE_REQUEST}
等于' /
'后面的任何字符。
RewriteCond %{REQUEST_URI} ^/(.*)$ [NC] RewriteRule ^(.*)$ index.php?$1 [NC,L]
所以我的PHP代码可以识别$_GET
参数。 在这里,即使条件满足,它也不会处理RewriteRule。
第二个问题是
www.hostname.com/index.php?category=spo -> www.hostname.com/category/spo www.hostname.com/index.php?category=ite -> www.hostname.com/category/ite www.hostname.com/index.php?category=gam -> www.hostname.com/category/gam
转换使用外部重写完成:
RewriteCond %{THE_REQUEST} /(index)\?category=([^&]+)\ HTTP RewriteRule ^ category/%2? [R=301,L]
再一次,我想将URL中写的任何内容还原为原始格式,所以我使用以下条件区分前一种情况,
RewriteCond %{REQUEST_URI} ^/category/(.*)$ RewriteRule ^category/(.*)/?$ index.php?category=$1 [NC,L]
我的PHP代码无法识别$_GET
参数和variables。 当我使用htaccestesting仪,它说它应该工作,但它不。 http://martinmelin.se/rewrite-rule-tester/
我该如何解决这个问题? 或者有没有更简单的方法来完成这个?
谢谢
试试这些规则:
RewriteEngine On RewriteCond %{THE_REQUEST} \s/index\.php\?category=([^&\s]+) [NC] RewriteRule ^ /category/%1? [R=301,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^category/([^/]+)/?$ /index.php?category=$1 [NC,L,QSA] RewriteCond %{THE_REQUEST} \s/index\.php\?([^&\s]+) [NC] RewriteRule ^ /%1? [R=301,L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([^/]+)/?$ /index.php?$1 [QSA,L]