4

我正在使用以下参数开发一个支持 PHP 中多种语言(英语和西班牙语)的网站:

www.website.com/contact?lang=en
www.website.com/contact?lang=es

是的,没有扩展名 .php ......我知道这是一种不好的做法,所以我想要这个:

www.website.com/en/contact
www.website.com/es/contact

我在 stackoverflow 中阅读了其他帖子,但是我不想使用 PHP 框架,并且我读到我必须使用 Mod Rewrite(再次因为我已经使用它来删除扩展名)。事实上,我读过这篇文章(以及其他文章),但没有任何效果。

完成后,我在谷歌页面中阅读了我必须使用的内容:

<link rel="alternate" href="http://www.website.com/" hreflang="x-default" />

这个对吗?

谢谢

编辑1:

我的 .htaccess 的内容是:

RewriteBase /

#Prevent directory listing
Options All -Indexes

#Disable Etags
Header unset ETag
FileETag None

#Prevent viewing of .htaccess
<Files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
</Files>

RewriteEngine on

#Redirect non-www/www
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

#RewriteCond %{HTTPS} off
#RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
#RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

Options +FollowSymlinks -MultiViews
#Rewrite url
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*)$ $1.html

RewriteCond %{REQUEST_FILENAME} -f  [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]

RewriteRule ^([^/]+)/([^/]+)  /$2?lang=$1 [L,NC,QSA]
4

3 回答 3

2

即使您使用您标记的帖子中的解决方案,通过微小的调整来满足您丢失的 php 文件结尾:

Options +FollowSymlinks -MultiViews
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_FILENAME} -f  [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .* - [L]

RewriteRule ^([^/]+)/([^/]+)  /$2?lang=$1 [L,NC,QSA]
于 2015-03-21T18:45:22.700 回答
1

这应该处理重定向。您需要按照@w3d 的说明修改您的链接。

RewriteCond %{QUERY_STRING} ^lang=(en|es)$ [NC]
RewriteRule ^contact$ /%1/contact? [R=301,L]

查询字符串中的|'or' 表示“或”,如果您想要其他语言,您可以在其中添加它们,或者您可以将其更改为不太安全的.*

于 2015-03-21T21:30:00.023 回答
1

这应该是您的完整 .htaccess,其中包含用于重定向特定语言 URL 的新规则:

#Disable Etags
Header unset ETag
FileETag None

#Prevent viewing of .htaccess
<Files ~ "^.*\.([Hh][Tt][Aa])">
order allow,deny
deny from all
</Files>

Options All -Indexes -MultiViews
RewriteEngine on
RewriteBase /

#Redirect non-www/www
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

# redirect /contact?lang=en to /en/contact
RewriteCond %{THE_REQUEST} /+([^?]+?)(?:\.php)?\?lang=([^\s&]+) [NC]
RewriteRule ^ /%2/%1? [R=301,L,NE]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+?)/?$ $1.html [L]

RewriteCond %{REQUEST_FILENAME} -f  [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule . - [L]

RewriteRule ^([^/]+)/([^/]+) $2?lang=$1 [L,QSA]
于 2015-03-22T07:05:49.533 回答