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等しい文字の 1 つとして使用すると、404 エラーが発生します。
  • .角括弧に追加すると、index.php出力されます。
  • 追加した場合、[または]404 エラーが発生します。

誰かが解決策を持っているなら、私はそれを見たいです。また、時間があれば、RewriteRule の各部分について、その部分が何をするのか説明してください。ありがとう!

4

2 に答える 2

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

最後に、それが機能した理由です:)すべての文字を受け入れる[QSA]使用を提案してくれたjedwardsに感謝します。^(.*)$

于 2012-06-02T23:56:22.300 に答える
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 に答える