.htaccess和params

时间:2012-01-03 02:18:25

标签: .htaccess mod-rewrite

我在网上挖掘.htaccess并重写我需要对我的网站做的规则。

我看到了一些我不理解的东西,想知道它意味着什么

我想知道我需要使用的2个正则表达式与我需要使用的其他所有其他正则表达式之间的差异:

RewriteRule ^home$ mainpage.php?id=$1 [QSA]

RewriteRule ^home(/)?$ mainpage.php?id=$1 [L]

我查看了QSA和L,但是(/)意味着什么?

2 个答案:

答案 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等,具体取决于模式中有多少个捕获组(括号组)以及它们的位置。)
顺便说一句,你的第一个RewriteRule没有多大意义 - 因为没有组为$1提供值,它可能总是空白。在第二个中,$1将为空或斜杠,具体取决于子模式是否匹配。 home将被重写为mainpage.php?id=home/将被重写为mainpage.php?id=/

  • ?表示“前一个原子的0或1”。 (“Atoms”,BTW,是正则表达式的构建块。)在这种情况下,由于它前面的原子是(/)(实际上是/),?表示“ 0或1斜杠“。