0

我想让一个 URL 看起来赏心悦目。

from 
    /index.php?a=grapes
to
    /grapes

虽然,我遇到了一些问题。我想a拥有更多种类的角色,例如a-z A-Z 0-9 / _ - . [ ].

from
    /index.php?a=Grapes.Are.Green/Red[W4t3r-M3l0n_B1G_Gr4p3]
to
    /Grapes.Are.Green/Red[W4t3r-M3l0n_B1G_Gr4p3]

在 index.php 文件中我有

<?php
    $a = $_GET["a"];
    echo $a;
?>

只是为了测试 URL 是否正常工作。

现在我在 .htaccess 中有什么

RewriteEngine On
RewriteRule ^([a-zA-Z0-9/_]+)?$ index.php?a=$1

只接受a-z A-Z 0-9 / _.

  • 如果我添加-到方括号中并将其作为a等于的字符之一,我会得到 404 错误。
  • 如果我添加.到方括号中,我会得到index.php输出。
  • 如果我添加[]收到 404 错误。

如果有人有解决方案,我很乐意看到它。另外,如果有人有时间,请您解释一下 RewriteRule 的每个部分,说明该部分的作用。谢谢!

4

2 回答 2

0

问题是你的某些角色是“特殊的”:

特殊的角色:

(full stop) - match any character
* (asterix) - match zero or more of the previous symbol
+ (plus) - match one or more of the previous symbol
? (question) - match zero or one of the previous symbol
\? (backslash-something) - match special characters
^ (caret) - match the start of a string
$ (dollar) - match the end of a string
[set] - match any one of the symbols inside the square braces.
(pattern) - grouping, remember what the pattern matched as a special variable

因此,如果您想在 url 中使用它们,则必须对它们进行转义。

例如 .s?html? 匹配“.htm”、“.shtm”、“.html”或“.shtml”

于 2012-06-02T22:12:29.260 回答
0
RewriteEngine On
RewriteRule ^(.*)$ index.php?a=$1 [QSA]

最后[QSA]是什么使它起作用:) 感谢 jedwards 建议使用^(.*)$which 接受所有字符。

于 2012-06-02T23:56:22.300 回答