我在网上挖掘.htaccess并重写我需要对我的网站做的规则。
我看到了一些我不理解的东西,想知道它意味着什么
我想知道我需要使用的2个正则表达式与我需要使用的其他所有其他正则表达式之间的差异:
RewriteRule ^home$ mainpage.php?id=$1 [QSA]
和
RewriteRule ^home(/)?$ mainpage.php?id=$1 [L]
我查看了QSA和L,但是(/)
意味着什么?
答案 0 :(得分:18)
表达式为(/)?
而不是(/)
。这意味着URL上的斜杠或不斜杠。这两个网址将转到同一个地方:
http://www.domain.com/home/
和
http://www.domain.com/home
所以斜杠是可选的。这样,如果机器人或搜索引擎放置它,该规则将起作用。
您可以像这样重写规则:
RewriteRule ^home/?$ mainpage.php?id=$1 [L,QSA]
另外,我看到你说:
其他所有我需要使用
如果您的所有页面都转到同一个文件(在本例中为mainpage.php),您可以创建一个自动重写它们的规则,而不是创建10或15个规则(或更多)。你可以这样做:
RewriteEngine on
REwriteBase /
RewriteRule ^([a-z0-9\-_]+)/?$ mainpage.php?id=$1 [L,QSA]
此规则将使用Letter,Numbers,Dash和Underscores作为页面。
答案 1 :(得分:2)
(/)?
表示“可选斜杠”。
(/)
创建一个包含/匹配括号之间的内容的组。在这种情况下,因为它是一个单个字符,所以括号更多地用于捕获碎片而不是其他任何东西。 (无论什么匹配将成为$1
,$2
等,具体取决于模式中有多少个捕获组(括号组)以及它们的位置。)$1
提供值,它可能总是空白。在第二个中,$1
将为空或斜杠,具体取决于子模式是否匹配。 home
将被重写为mainpage.php?id=
,home/
将被重写为mainpage.php?id=/
。
?
表示“前一个原子的0或1”。 (“Atoms”,BTW,是正则表达式的构建块。)在这种情况下,由于它前面的原子是(/)
(实际上是/
),?
表示“ 0或1斜杠“。