语言网站的RewriteRule

时间:2014-03-03 12:55:38

标签: php apache .htaccess mod-rewrite

我做了一个小的多语言网站,为了有更好的搜索引擎优化,我试图用一些重写规则制作一个htaccess文件。

该网站是这样的:

  • 碱/索引
    • 碱/ folder1中/索引
    • 碱/文件夹2 /索引
    • 碱/ folder3 /索引

ErrorDocument 404 /404
RewriteEngine on
RewriteBase /
###########
#   RewriteRule for errors
######
RewriteCond %{REQUEST_URI} ^/404$
RewriteRule ^(.*)$ /errors/404.php [L]
###########
#   Skip for many file extension
######
RewriteRule ^\.(css|jpe?g|gif|png)$ - [L]
###########
#   Remove a trailing slash if needed 
######
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.*)/$ $1 [R=301,L]
###########
#   SEO Rewrite
######
RewriteRule ^(en|it|fr|es|cn)/?$ index.php?lang=$1 [L,QSA]
RewriteRule ^(en|it|fr|es|cn)/(folder1|folder2|folder3|folder4)$ $2/index.php?lang=$1 [L,QSA]

我有什么可以做的或我错过了,以改善网站!?

1 个答案:

答案 0 :(得分:1)

这是错误的:

RewriteRule ^\.(css|jpe?g|gif|png)$ - [L]

^表示“URI的开头”,$表示“URI的结尾”。因此该模式仅匹配看起来像http://example.com/.css的URI。摆脱^

RewriteRule \.(css|jpe?g|gif|png)$ - [L]

对于尾随斜杠的东西,你应该确保你没有请求目录:

###########
#   Remove a trailing slash if needed 
######
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.*)/$ $1 [R=301,L]

或关闭mod_dir。 Mod_dir将自动将对缺少尾部斜杠的目录的任何请求重定向到具有尾部斜杠的相同URL。这与您的规则相反,它将导致重定向循环。保留mod_dir是一个很好的理由,因为即使你有一个索引文件,它也会阻止目录内容的信息泄露。