我试图得到它,以便它将url重写为php的变量,
到目前为止,我有:RewriteEngine On
RewriteRule ^sub/(.*).html$ index.php?sub=$1
RewriteRule ^(.*).html$ index.php?page=$1
/ sub / one工作得很好,虽然第一页不起作用,
抱歉,重写规则的初学者, 可以解决一些问题吗?我猜这个问题是你不能像我一样堆叠重写规则......我不能以任何方式改变目录结构,所以这是我必须使用的:
page.html
page2.html
sub/123.html
sub/827.html
先谢谢!
〜Jmyeom
修改
在规则末尾添加[NC,L]解决了这个问题,
即
RewriteEngine On
RewriteRule ^sub/(.*).html$ index.php?sub=$1 [NC,L]
RewriteRule ^(.*).html$ index.php?page=$1 [NC,L]
虽然,现在,我怎么做到它不会重写不是/ sub /的不同子文件夹,即/ src /?
再次感谢 〜Jmyeom
答案 0 :(得分:1)
如果我理解了最后一个问题(在编辑之后),你想限制第二次重写,以便它只会重写页面,而不是重写其他子目录?
您可以通过将匹配的文字更改为“/
以外的任何字符”来实现:
RewriteRule ^([^/]*)\.html$ index.php?page=$1 [NC,L]
在正则表达式中,[
]
匹配任何指定的字符,如果您将^
放在开头,它会匹配不介于方括号之间...所以这里我们匹配任何不是斜线的东西。
答案 1 :(得分:0)
如果你的URI结构真的像这样:
/page.html
/page2.html
/sub/123.html
/sub/827.html
然后你的规则应该是:
RewriteRule ^/sub/(.*).html$ index.php?sub=$1 [NC,L]
RewriteRule ^/(.*).html$ index.php?page=$1 [NC,L]
否则我会用它来消除不必要的重写:
RewriteRule ^/.*/sub/(.*).html$ index.php?sub=$1 [NC,L]
RewriteRule ^/.*/(.*).html$ index.php?page=$1 [NC,L]
要排除模式,您可以执行此操作:
RewriteCond %{REQUEST_URI} !^/src/
RewriteRule ^/(.*).html$ index.php?page=$1 [NC,L]
另请注意,默认情况下,上述规则将执行302(临时重定向)。大多数人真的想要301(永久重定向),特别是如果他们关心SEO。 [R=301,NC,L]