2016-04-26 60 views
0

在我的定製CMS我有一個鏈接頁面像這樣:PHP語言和的.htaccess

www.mywebsite.com/index.php 

現在,我嘗試使用多種語言的網頁,所以我的索引頁上進行測試。通過MySQL和語言切換器,我可以成功地從所選語言獲取內容。

所以,鏈接變成這樣的英語和德語:

www.mywebsite.com/index.php?lang=en 
www.mywebsite.com/index.php?lang=de 

有了這個htaccess的代碼,我去掉.php然後index.php文件:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 

所以鏈路變得像這樣:

www.mywebsite.com/?lang=en 
www.mywebsite.com/?lang=de 

對於SEO的目的我想刪除參數LANG = EN或LANG = DE,並把/ EN或/日,S? ○URL看起來像這樣:

www.mywebsite.com/en 
www.mywebsite.com/de 

我已經與htaccess的嘗試這樣做:

RewriteRule ^/(.+?)/(.*)$ $2?lang=$1 [L] 

或本:

RewriteRule ^/(en|de)/(.*)$ $2?lang=$1 [L] 

但是,當我試圖進入網頁WWW。 mywebsite.com/en或www.mywebsite.com/de,內容不會更改。

我想我必須在htaccess的代碼錯誤...

而且我想要做的其他頁面相同的功能,讓我們說這個頁面:

www.mywebsite.com/posts?lang=en 

成爲

www.mywebsite.com/en/posts 
+2

不應該是'$ 2.php?lang = $ 1'嗎?最初你正在重寫一個'.php'文件。在語言變體中缺少這一點。 – ROAL

+0

你好,ROAL。我也試過這個代碼:** RewriteRule^/(。+?)/(。*)$ $ 2.php?lang = $ 1 [L] **,但它不會改變任何東西。有了這個:** RewriteRule^/(。+?)/(。*)$ $ 2?lang = $ 1 [L] **但它仍然不起作用。 – user2519032

+0

嘗試刪除第一個斜槓,使其成爲'RewriteRule ^(。+?)/(。*)$ $ 2.php?lang = $ 1 [L]'。 – ROAL

回答

1

你缺少你的新重寫規則的.php
它應該是如下:

RewriteRule ^(.+?)/(.*)$ $2.php?lang=$1 [L] 

至於在評論(CSS和JS文件)中提到的問題,你已經找到了正確的方法,解決使用:

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

這告訴apache如果請求指向真實的現有文件或目錄,則不應用RewriteRule。

0

要轉換http://example.com/file.php?lang=foohttp://example.com/foo/file您可以在root/.htaccesso使用以下規則:

RewriteEngine on 

#1)remove .php exten# 
RewriteCond %{REQUEST_FILENAME}.php -f 
RewriteRule ^([^\.]+)$ $1.php [NC,L] 
#2)Redirect "/file.php?lang=foo" to "/foo/file"# 
RewriteCond %{THE_REQUEST} /([^.]+)\.php\?lang=([^\s&]+)\sHTTP [NC] 
RewriteRule^/%2/%1? [L,R] 
#3)The rule bellow will internally map "/foo/file" to "/file.php?lang=foo"# 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(en|de)/([^/]+)/?$ /$2.php?id=$1 [L] 

[測試]

+0

我粘貼了你的代碼,清除了緩存,即使它不起作用。如果我進入「www.mywebsite.com/posts?lang = en」這個頁面,它會顯示英文內容,「www.mywebsite.com/posts?lang = de」顯示德語內容,但如果我嘗試輸入「www。 mywebsite.com/en/posts「,它仍然顯示德語內容,所以它不會改變任何內容。 – user2519032

+0

@ User2519032該代碼適用於我的服務器。看起來還有其他事情正在發生。您的php重定向或其他htaccess規則可能與此衝突。 – starkeen