我们的网站具有以下文件结构:
/www
/nl
index.php
contact.php
...
/fr
index.php
contact.php
...
/de
index.php
contact.php
...
index.php
.htaccess
index.php
文件夹中的www
文件是一个语言选择页面,该页面链接到index.php
,nl
和{{fr
个文件1}}文件夹。后面的index.php页面构建网页并从de
加载页面内容。
过去,网页的加载方式如下:
<page>.php
这会将http://www.ourdomain.com/nl/index.php?page=contact
的内容加载到网站结构中。
为了使网站更加SEO友好,我们将其更改为:
/nl/contact.php
这最多可达3级(http://www.ourdomain.com/nl/contact
)
/nl/nav-level1/nav-level2/nav-level3
,nl
和fr
文件夹中的index.php文件有一个算法,301将旧页面网址重定向到访问该网站的用户的新网页网址来自旧网址。
de
根www目录中的.htaccess文件如下所示:
header( 'HTTP/1.1 301 Moved Permanently' );
header('location:' . $newurl);
exit;
这很好用,直到我将这个网站移到我们新托管服务提供商的服务器上。
现在,当我转到RewriteEngine On
# RewriteBase wijzigen in / (online)
RewriteBase /
# PDF: redirect pdf file in wrong directory to root language directory (nl/fr/en)
RewriteRule ^(nl|fr|de)(/[a-zA-Z0-9\-/]+)+/([a-zA-Z0-9\-]+.pdf)/?$ $1/$3 [NC,L,R=301]
# pages: redirect index.php in wrong directory to the correct language directory (nl/fr/en)
RewriteRule ^(nl|fr|de)(/[a-zA-Z0-9\-/]+)+/(index.php)/?$ $1/$3 [NC,L]
# pages: convert SEO friendly url to index.php?page=<page>
RewriteRule ^(nl|fr|de)(/[a-zA-Z0-9\-/]+)*/([a-zA-Z0-9\-]+)/?$ $1/index.php?page=$3 [NC,L]
时,不会加载http://www.ourdomain.com/nl/contact
,而是直接加载http://www.ourdomain.com/nl/index.php?page=contact
。这意味着我可以看到页面的内容,但没有我们网站的其他结构和布局。
我通过
检查http://www.ourdomain.com/nl/contact.php
文件是否有效
然后我发现我可以通过在与php文件同名的语言文件夹(.htaccess
,nl
,fr
)中创建文件夹来解决此问题。这使得seo友好的URL按预期加载页面,但不知何故,get变量仍然被添加到seo友好的URL中。
de
而不是/www
/nl
/contact
/...
index.php
contact.php
...
/fr
/contact
/...
index.php
contact.php
...
/de
/contact
/...
index.php
contact.php
...
index.php
.htaccess
我总是被重定向到http://www.ourdomain.com/nl/contact
如果我转到http://www.ourdomain.com/nl/contact/?page=contact
get变量未添加到网址。
我一直在努力寻找这个问题的几个小时,我不理解它。任何有价值的意见将不胜感激。
答案 0 :(得分:0)
我刚刚找到了问题的答案。
显然,在新服务器上设置了MultiViews
。因此,没有扩展名的文件名与包含扩展名的文件相匹配,导致http://example.com/nl/contact
加载http://example.com/nl/contact.php
。