2016-04-26 42 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