我第一次潜入htaccess / mod重写的使用,我在重定向/掩码方面遇到了一些麻烦。
我在我的根文件夹中有一个名为modrw
的测试目录,该文件夹中的index.php
文件非常简单:
<?php echo $_GET['name']; ?>
在浏览器中输入www.domain.com/modrw/{word}/
,然后在页面上回显该词,这就是我想要的。
如果我输入www.domain.com/modrw/name={word}
,那么我会被重定向到www.domain.com/modrw/{word}/
,并且该字也会按照我的意图回显。
但是,如果我将浏览器定向到网址www.domain.com/modrw/?name={word}/
,则会回显该字词,但我不会像我希望的那样重定向到www.domain.com/modrw/{word}/
。
?
如何造成麻烦?在下面的RewriteRule代码中包含?
,我尝试了几种不同的方法,但无法使其正常工作。
这是我的htaccess文件:
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{REQUEST_URI} ^/[^\.]+[^/]$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L]
RewriteRule ^modrw/?name=([^/\.]+)/?$ http://www.domain.com/modrw/$1 [R]
RewriteRule ^modrw/([^/\.]+)/?$ modrw/?name=$1
导致问题的原因是,是否有一种特定的方式来包含?
,它是否完全没有选择它?我采取了错误的做法吗?
我也尝试使用Options +FollowSymlinks
,但我不完全确定这是做什么,也不是完全需要......
答案 0 :(得分:3)
请记住,RewriteRuleonly与REQUEST_URI匹配。要匹配查询字符串,必须将RewriteCond与变量%{QUERY_STRING}一起使用。对于前者在你的情况下:
RewriteCond %{QUERY_STRING} ^name=(.*)(&|$) [NC]
RewriteRule ^modrw /modrw/%1? [L,R,NC]