2012-09-10 107 views
2

感謝@Ωmega,我幾乎完全(這裏.htaccess regular expression issue詳情)解決了我的前一個問題,來到了此解決方案:的.htaccess的RewriteCond小問題

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} ^(.*/|)(en|de|fr)(/|)$ [NC] 
RewriteCond %1%3index.php -f 
RewriteRule ^(.*/|)(en|de|fr)(/|)$ index.php?lang=$2 [NC,QSA,L] 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} ^(.*/|)(en|de|fr)(/.*|)$ [NC] 
#RewriteCond $1$3.php -f 
RewriteRule ^(.*/|)(en|de|fr)(/.*|)$ $1$3.php?lang=$2 [NC,QSA,L] 

基本上,這些線路將在domain/language/sub/.../somepage形式重寫任何東西到domain/sub/.../somepage.php?lang=language。第一個區塊是domain/language/形式的網址,有或沒有結尾/,它被重定向到index.php

這個作品非常好壽兩個小毛刺保持它們是:

  1. 在第二塊(我#commented)只要不匹配,不管是什麼第三行。奇怪的部分是,它在第​​四行工作,即我的頁面實際顯示正常。這是否意味着-f參數在這裏是錯誤的?

  2. 如果我輸入了/結尾的網址(第二塊而已,它與索引文件的工作),我重寫被打破,即輸出爲domain/language/sub/.../somepage/.php有沒有辦法在輸入的網址中以排除潛在/正則表達式?

謝謝您的反饋!

回答

0

無論如何,第二塊(I#評論它)的第三行不匹配。奇怪的部分是,它在第​​四行工作,即我的頁面實際顯示正常。這是否意味着-f參數在這裏是錯誤的?

您正在使用錯誤的反向引用。你想要%1%3:

RewriteCond %1%3.php -f 

如果我輸入了/結束(第二塊而已,它與索引文件的工作)的任何URL,我重寫被打破,即輸出作爲域/語言/sub/.../somepage/.php有沒有什麼辦法排除在正則表達式輸入url中的潛在/ /?

是的,你可以嘗試在RewriteCondRewriteRule無論從^(.*/|)(en|de|fr)(/.*|)$改變你的正則表達式來^(.*/|)(en|de|fr)(/.*?)/?$

+0

這個'^(。*/|)(en | de | fr)(/.*?)/?$'根本不匹配。這個'^(。*/|)(en | de | fr)(/.* |)/?$'最終會匹配,但問題是一樣的,結尾的'/'被第三個'並結束輸出'somepage/.php'。現在對於RewriteCond,它不起作用:(但真的不知道爲什麼。即使我的頁面正確顯示,然後我取消註釋'#RewriteCond%1%3.php -f',url不匹配怪異的 – PinkTurtle

+0

parens裏面的'?'使它成爲一個非貪婪的搜索,所以最後一個'/?'不會被'。*'分組所吞噬 –

+0

好吧,這可行,但你忘了提及僅在'RewriteRule'行進行修改,謝謝 – PinkTurtle