2

任意の長さの文字の間にピリオドを 1 つだけ許可する mod 書き換えルールを作成しています。文字は文字で始まり、その後に 2 ~ 29 文字または数字が続く必要があり、途中にピリオド (オプション) を 1 つだけ使用できます (ただし、最後には使用できません)。

これが私がこれまでに持っているものです:

RewriteCond    %{REQUEST_FILENAME}        !-f
RewriteCond    %{REQUEST_FILENAME}        !-d
RewriteRule    ^([a-z]([.a-z0-9]{2,29}))$    user.php?u=$1     [NC,QSA,L]

f.oo(有効)、foo.(無効)、f.o.o(無効)、さらにはf.......

apache の mod 書き換えだけで達成できますか? または、チェックはPHPまたは他の場所で行う必要がありますか?

同様の質問: this onethis one .

ありがとうございました。

4

2 に答える 2

1

1つの正規表現でそれを行う方法がわかりませんが、正規表現を積み重ねることはできます

^[a-z][.a-z0-9]{2,29}$     #3-30 characters long, starting with a letter, then nums
^[a-z0-9]+\.?[a-z0-9]+$    #has zero or one dot in middle

数値を考慮に入れるように更新

http://regex101.com/r/nD2lI6

http://regex101.com/r/gR3vA1

したがって、完全な例は次のようになります。

RewriteCond    %{REQUEST_FILENAME}        !-f
RewriteCond    %{REQUEST_FILENAME}        !-d
RewriteCond    %{REQUEST_URI}  ^[a-z][.a-z0-9]{2,29}$
RewriteRule    ^([a-z0-9]+\.?[a-z0-9]+)$     user.php?u=$1     [NC,QSA,L]
于 2012-12-24T08:16:32.060 に答える