2015-10-11 48 views
3

我正在研究「ManualTranslation」類,並且我被困在.htaccess部分。爲特定的重寫查詢添加尾部斜槓

我試圖只將這個查詢?language=xx改寫成/xx/

到目前爲止,我設法使它工作,並不確定它是否是好的或適當的......但它確實缺少一件事。如果由於某種原因 - 有人嘗試通過手動選擇語言:

http://domain.com/it並忘記添加結尾斜槓,我的.htaccess作品失敗。所以它應該自動添加尾部斜槓(如果它從此查詢參數中缺失)。

RewriteEngine On 
Options +FollowSymlinks 
RewriteBase/

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

RewriteRule ^([a-zA-Z]{2})/(.*)$ $2?language=$1 [QSA] 

就目前而言,這隻能是這樣的: http://domain.com/it/但不是因爲缺少這應該是有斜線的http://domain.com/it

如果有人能告訴我我錯過了什麼?


而且我想知道如果有機會的話,如果它未能找到語言來刪除重寫的查詢字符串php。現在我基本上只是重新導向到當前文件,我還不滿意嗎?

if (isset($query) && !$this->isAllowed($query)) 
{ 
    header("Location: {$_SERVER['PHP_SELF']}"); 
    exit; 
} 

回答

1

你可以調整當前規則允許的網址不/結束:

RewriteEngine On 
Options +FollowSymlinks 
RewriteBase/

## Adding a trailing slash 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{THE_REQUEST} \s/+.*?[^/][?\s] 
RewriteRule [^/]$ %{REQUEST_URI}/ [L,R=301] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^([a-zA-Z]{2})(/.*)?$ $2?language=$1 [QSA,L] 

但是記住,像http://domain.com/contacts一個URL將不受影響上述規則,你將不會有填充language參數。

+0

是的,是的。我知道語言參數將在每個頁面重定向。但我將「選定/檢測」語言存儲到會話中供以後使用。我假設我可以使用PHP來強制語言參數,但我不介意這樣。 你的重寫現在可以用「/」工作,沒有它,但這可能不適合搜索引擎優化?我認爲它應該只作爲「/ xx /」總是關閉。失蹤時可以強制結尾斜線嗎? – dvLden

+0

好的嘗試我更新的答案。 – anubhava

+1

太棒了!它正在按我的預期工作。 – dvLden

0

試試這個:

RewriteCond ^([a-z]{2})$ /$1/ [R=301,L,NC] 

把它只是你的RewriteBase行之後。

+0

內部服務器錯誤500 – dvLden