【问题标题】:.htaccess mod_rewrite, remove first segment in some cases (when it is a country code).htaccess mod_rewrite,在某些情况下删除第一段(当它是国家代码时)
【发布时间】:2017-03-25 19:09:08
【问题描述】:

我想在现有的 .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>

因此,如果 URL 以 nz / au / us 开头,那么第一段将从创建的“url-get 变量”中删除并添加为它自己的 get 变量。

例如


[域名在这里]/nz/my/page/is/here/

被重定向到:

main.php?url=/my/page/is/here/&country=nz


[域名在这里]/au/my/other-page/is/here/

被重定向到:

main.php?url=/my/other-page/is/here/&country=au


[域名到这里]/my/third-page/is/here/

被重定向到:

main.php?url=/my/third-page/is/here/

【问题讨论】:

    标签: apache .htaccess mod-rewrite internationalization silverstripe


    【解决方案1】:

    你可以这样做:

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

    请记住,这将使国家/地区代码成为 URL 的必填部分,您可能必须为生成的所有链接添加前缀。 当然,您始终可以在下面添加原始重写规则作为后备。因此,您的完整规则集将如下所示:

    # 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]
    

    【讨论】:

    • 谢谢...第二个选项听起来很适合我们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多