使用.htaccess制作具有各种字符的精美网址

时间:2012-06-02 22:01:58

标签: php .htaccess

我想让网页看起来很好看。

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;
?>

只是为了测试网址是否正常运行。

现在我在.htaccess中有什么

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

仅接受a-z A-Z 0-9 / _

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

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

2 个答案:

答案 0 :(得分: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

因此,如果您想在网址中使用它们,则必须使用它们。

例如     .S?HTML?匹配“.htm”,“。shtm”,“。html”或“.shtml”

答案 1 :(得分:0)

RewriteEngine On
RewriteRule ^(.*)$ index.php?a=$1 [QSA]

最后的[QSA]是让它工作的原因:)感谢jedwards建议使用接受所有字符的^(.*)$