0

我正在尝试获取它,以便将 url 重写为 php 的变量,

到目前为止,我有:

RewriteEngine On
RewriteRule ^sub/(.*).html$ index.php?sub=$1
RewriteRule ^(.*).html$ index.php?page=$1

/sub/ 一个工作得很好,虽然第一页不工作,

抱歉,重写规则的初学者,

有什么可以阐明的吗?我猜问题是你不能像我一样堆叠重写规则......

我无法以任何方式更改目录结构,所以这是我必须使用的:

page.html
page2.html
sub/123.html
sub/827.html

先谢谢了!

〜Jmyeom

编辑

在规则末尾添加 [NC,L] 可解决此问题,

IE

RewriteEngine On
RewriteRule ^sub/(.*).html$ index.php?sub=$1 [NC,L]
RewriteRule ^(.*).html$ index.php?page=$1 [NC,L]

虽然,现在,我将如何做到这一点,以便它不会在不是 /sub/ 的不同子文件夹上重写,即 /src/?

再次感谢~Jmyeom

4

2 回答 2

1

如果我理解最后一个问题(在您编辑之后),您想限制第二次重写,以便它只重写页面,而不重写其他子目录?

您可以通过将匹配的文本更改为“除 a 之外的任何字符”来做到这一点/

RewriteRule ^([^/]*)\.html$ index.php?page=$1 [NC,L]

在正则表达式中,[ ]匹配任何指定的字符,如果你把它放在^开头,它匹配任何不在方括号之间的字符......所以这里我们匹配任何不是斜线的字符。

于 2013-05-10T12:17:35.973 回答
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]

于 2013-05-11T11:53:18.770 回答