2009-08-29 18 views
0

私は自分のサイトのバグに出くわしました。基本的に、完全な停止(ピリオド)のあるページ名は許可されません。私は問題の根本が私の.htaccessファイルにあることを知っています。句読点を含むModリライト?

RewriteEngine on 
RewriteRule ^([^/\.]+)/?$ index.php?section=$1 [L] 
RewriteRule ^([^/\.]+)/([^/\.]+)/?$ index.php?section=$1&page=$2 [L] 
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ index.php?section=$1&page=$2&split=$3 [L] 

ここでは正規表現は、ユーザーが直接ファイルにアクセスしようとしている場合、これは意図的なものです、ピリオドで何も一致しません。

一般的なURLの例を次に示します。

games/Spider:+The+Secret+of+Bryce+Manor 
games/Orbital 
features/Interviewed:+Dennis+Sijnen+from+No+Monkeys 
news/all/4 

通常、URLの部分はページ番号付けにのみ使用されます。私は、例えば、完全な停止を配置したい場所をURLのpage部分は次のとおりです。

games/Must.Eat.Birds 

私はちょうど完全な停止を可能にするソリューションを希望モッズ書き換えまたは正規表現のいずれかで特に苦手のよう。私はそれが潜在的にもっと複雑な正規表現になる可能性があることを知っています、そして、ここで私は自分の深みから外れています。

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

+0

私はあなたが書き換えたいURL(そして何をすべきか)と書き換えないべきURLの例を挙げる必要があると思います。簡単な答えは正規表現から '\ .'を取り除くことです。その原因は何か? – cjm

+0

申し訳ありませんcjm、私は今それをしました。 :-) – different

答えて

2

Simonsレスポンスが問題を解決します。[^/\.]の代わりに[^/]の「ページ」部分を置き換えて、ピリオドをエスケープする必要はありません。

あなたの質問のテキストに基づいて、あなたは興味があるかもしれません:あなたのDocumentRoot内の実際のファイル、リンク、またはディレクトリにマッチします。後のルール - /css/main.cssが実際のファイルに移動することを保証します。その後、他のものは書き換えられ、index.phpにダンプされます。

# -s = File Exists 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
# -l = Is a SymLink 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
# -d = Is a Directory 
RewriteCond %{REQUEST_FILENAME} -d 
# if we match any of the above conditions - serve the file. 
RewriteRule ^.*$ - [NC,L] 

# adding your rules with the slight modifications pointed out above and by simon. 
# only allows '.' in the "page" portion. 
RewriteRule ^([^/.]+)/?$ index.php?section=$1 [L] 
RewriteRule ^([^/.]+)/([^/]+)/?$ index.php?section=$1&page=$2 [L] 
RewriteRule ^([^/.]+)/([^/]+)/([^/.]+)/?$ index.php?section=$1&page=$2&split=$3 [L] 
+0

確かに、Simonの答えは最初の私の懸念の一つであった実際のファイルを考慮していません。どうもありがとう。 :[)] – different

+0

dosen't '[^ /。]'は、 '/'または*任意の文字(。)でないすべての文字と一致することを意味します*? – Eric

+0

セット( '[]')の 'ちょうど '.'、あなた自身のためのテスト – gnarf

2

[^/\.]をすべて[^/]に置き換えて、 '/'ではなく ''ではないものすべてではなく、 '/'以外のすべてと一致するようにします。

特定の位置にドットを許可しない場合は、それらの位置にある古い正規表現を変更しないでください。

+0

ありがとう、私はそれを働かせた。 :-) – different

関連する問題