1

我正在尝试创建一些重写规则,以通过 URL 以简短易读的方式按日期组织内容。

IE

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 不起作用。从上面的示例中,其中三个按预期工作。但其他人以这些方式输出:

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

不要/?到处说。这?意味着前面的表达式是可选的。这意味着2012match ([0-9]+)/?([0-9]+)/?([0-9]+)/?,因为那些斜线不必在那里。您想要的是([0-9]+)/([0-9]+)/([0-9]+)/?,因为您希望URL 末尾的斜杠是可选的。

于 2012-12-31T19:07:17.187 回答