我想通过 .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
参数和变量。当我使用 htaccess 测试器时,它说它应该可以工作,但事实并非如此。http://martinmelin.se/rewrite-rule-tester/ http://martinmelin.se/rewrite-rule-tester/
我该如何解决这个问题?或者有没有更简单的方法来实现这一点?
谢谢