1

短く読みやすい方法で URL を介して日付ごとにコンテンツを整理するためのいくつかの書き換えルールを作成しようとしています。

すなわち

http://mysite.com/post/index.php?a=Dave&b=2012&c=12&d=31&e=1
http://mysite.com/post/index.php?a=Dave&b=2012&c=12&d=31
http://mysite.com/post/index.php?a=Dave&b=2012&c=12
http://mysite.com/post/index.php?a=Dave&b=2012
http://mysite.com/post/index.php?a=Dave&b=all

になる

http://mysite.com/post/Dave/2012/12/31/1
http://mysite.com/post/Dave/2012/12/31
http://mysite.com/post/Dave/2012/12
http://mysite.com/post/Dave/2012
http://mysite.com/post/Dave/all

これは、//mysite.com/post/ にある .htaccess です。

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([a-zA-Z0-9_-]+)/?([a-zA-Z0-9]+)/?([0-9]+)/?([0-9]+)/?([0-9]+)?$ index.php?a=$1&b=$2&c=$3&d=$4&e=$5 [L,NC,QSA]
RewriteRule ^([a-zA-Z0-9_-]+)/?([a-zA-Z0-9]+)/?([0-9]+)/?([0-9]+)/?([0-9]+)/?$ index.php?a=$1&b=$2&c=$3&d=$4&e=$5 [L,NC,QSA]

RewriteRule ^([a-zA-Z0-9_-]+)/?([a-zA-Z0-9]+)/?([0-9]+)/?([0-9]+)?$ index.php?a=$1&b=$2&c=$3&d=$4 [L,NC,QSA]
RewriteRule ^([a-zA-Z0-9_-]+)/?([a-zA-Z0-9]+)/?([0-9]+)/?([0-9]+)/?$ index.php?a=$1&b=$2&c=$3&d=$4 [L,NC,QSA]

RewriteRule ^([a-zA-Z0-9_-]+)/?([a-zA-Z0-9]+)/?([0-9]+)?$ index.php?a=$1&b=$2&c=$3 [L,NC,QSA]
RewriteRule ^([a-zA-Z0-9_-]+)/?([a-zA-Z0-9]+)/?([0-9]+)/?$ index.php?a=$1&b=$2&c=$3 [L,NC,QSA]

RewriteRule ^([a-zA-Z0-9_-]+)/?([a-zA-Z0-9]+)?$ index.php?a=$1&b=$2 [L,NC,QSA]
RewriteRule ^([a-zA-Z0-9_-]+)/?([a-zA-Z0-9]+)/?$ index.php?a=$1&b=$2 [L,NC,QSA]

RewriteRule ^([a-zA-Z0-9_-]+)$ index.php?a=$1 [L,NC,QSA]
RewriteRule ^([a-zA-Z0-9_-]+)/$ index.php?a=$1 [L,NC,QSA]

問題は、一部の URL が機能しないことです。上記の例から、そのうちの 3 つは期待どおりに機能します。しかし、他の出力は次のようになります。

URL: http://mysite.com/post/Dave/2012/12
OUTPUTS:
    a => Dave
    b => 2012
    c => 1
    d => 2
URL: http://mysite.com/post/Dave/2012
OUTPUTS:
    a => Dave
    b => 20
    c => 1
    d => 2

そして、これは明らかに正しい値ではなく、数値を他の変数に分割しているようです。

なぜこれを行うのですか?それを修正するにはどうすればよいですか?

4

1 に答える 1

2

/?どこでも言わないでください。は?、前の式がオプションであることを意味します。これは、それらのスラッシュが存在する必要がないため、が2012一致することを意味します。URL の末尾の([0-9]+)/?([0-9]+)/?([0-9]+)/?スラッシュは省略可能にしたい([0-9]+)/([0-9]+)/([0-9]+)/?ので、必要なのは です。

于 2012-12-31T19:07:17.187 に答える