2012-12-31 19 views
1

我想創建一些重寫規則,以簡短易讀的方式通過URL按日期組織內容。.htaccess日期重寫,即/ 2012/12/31

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 

這是我的.htaccess在//mysite.com/post/

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: 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 

而這顯然是不正確的價值觀,顯然是分手了跨越其他變量的數目。

爲什麼要這樣做,我該怎麼辦才能解決這個問題?

回答

2

不要說到處都是/??表示前面的表達式是可選的。這意味着2012匹配([0-9]+)/?([0-9]+)/?([0-9]+)/?,因爲那些斜槓不一定在那裏。你想要的是([0-9]+)/([0-9]+)/([0-9]+)/?,因爲你希望URL末尾的斜槓是可選的。

+0

因此,這也意味着我不需要加倍所有的重寫規則爲一個主要的斜槓?該解決方案奇妙地工作,並已解決了其他類似的問題,謝謝! – Felixpitau

+0

開頭的斜槓會是一個斜線,所以我認爲你的意思是一個斜線。是的,這正是你使用'?'的原因。似乎你在所有錯誤的地方使用它們,沒有一個是正確的;) – 2012-12-31 19:17:03

+0

是的,尾隨斜線。我找到了一個他們正在使用它的頁面,我認爲這是與變量和模式匹配的地方有關的,這在回想起來似乎很荒謬。 – Felixpitau