.htaccess mod_rewrite,在某些情况下删除第一个段(当它是国家/地区代码时)

时间:2017-03-25 19:09:09

标签: apache .htaccess mod-rewrite internationalization silverstripe

我想在现有的.htaccess文件中添加一些.htaccess知识(参见https://github.com/silverstripe/silverstripe-installer/blob/master/.htaccess):

<IfModule mod_rewrite.c>
    SetEnv HTTP_MOD_REWRITE On
    RewriteEngine On
    RewriteCond %{REQUEST_URI} ^(.*)$
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule .* framework/main.php?url=%1 [QSA]
</IfModule>

因此,如果网址以nz / au / us开头,那么第一段将从&#34; url-get变量&#34;中移除。创建并添加为自己的get变量。

e.g。

[域名到此处] / nz / my / page / is / here /

被重定向到:

main.php URL = /我/页/是/在这里/&放大器;国家= NZ

[域名到此处] / au / my / other-page / is / here /

被重定向到:

main.php URL = /我的/其它页面/是/在这里/&放大器;国家= AU

[域名到此处] / my / third-page / is / here /

被重定向到:

main.php?URL = /我的/第三页/是/在这里/

1 个答案:

答案 0 :(得分:3)

您可以这样做:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(nz|au|us)/?(.*)$ framework/main.php?url=$2&country=$1 [NC,L]

请注意,这会使国家/地区代码成为网址的强制性部分,您可能必须为您生成的所有链接添加前缀。 当然,你总是可以在下面添加原始重写规则作为后备。所以你的完整规则将如下所示:

# Match URL with country code
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(nz|au|us)/?(.*)$ framework/main.php?url=$2&country=$1 [NC,L]

# Fallback to original rewrite-rule
RewriteCond %{REQUEST_URI} ^(.*)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* framework/main.php?url=%1 [QSA]