【问题标题】:htaccess - subfolder redirect not workinghtaccess - 子文件夹重定向不起作用
【发布时间】:2014-01-20 20:11:58
【问题描述】:

我对 .htaccess 重定向有疑问,希望有人可以帮助我(我尝试了 1.5 小时...)。

我想做什么:
1) 将 mydomain.com/en/ 重定向到 mydomain.com(隐藏文件夹)
2) 仍然照常使用子文件夹 mydomain.com/fr/ 或 mydomain.com/es

我的 htaccess 文件(位于主文件夹中,而不是 /en/ 中的 (!)):

RewriteEngine on  
RewriteCond %{REQUEST_URI} !^en/  
RewriteRule ^(.*)$ en/$1 [L]

它的作用:
1) 作品:从 mydomain.com/en/ 重定向到 mydomain.com 作品
2) 问题:当我输入 mydomain.com/fr/ 时,它会重定向到 mydomain.com/en/fr/

问题:
如何使此重定向仅适用于 /en/ 文件夹而不适用于其他文件夹?
这样 mydomain.com/fr/ 将只保留 mydomain.com/fr/?

非常感谢您的帮助!

【问题讨论】:

    标签: .htaccess redirect subdirectory


    【解决方案1】:

    尝试添加额外的检查:

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} !^en/  
    RewriteRule ^(.*)$ en/$1 [L]
    

    RewriteCond %{DOCUMENT_ROOT}/en%{REQUEST_URI} -f [OR]
    RewriteCond %{DOCUMENT_ROOT}/en%{REQUEST_URI} -d
    RewriteCond %{REQUEST_URI} !^en/  
    RewriteRule ^(.*)$ en/$1 [L]
    

    删除文件夹:

    RewriteCond %{THE_REQUEST} \ /+en/([^\ \?]*)
    RewriteRule ^ /%1 [L,R]
    

    【讨论】:

    • 不幸的是,这两个选项都不起作用。他们不隐藏文件夹,因此它保留在 mydomain.com/en/ (好像 htaccess 中没有任何内容)。
    • @Student 这只会重写前面没有 /en/ 的 URL。 “模式”是^(.*)$(任意),规则的目标是“/en/(任意)”。没有规则可以将 /en/something 之类的 URL 重定向到 /something,这是完全不同的并且是外部的
    • 我无法正常工作。我想根据用户的国家 IP 将用户重定向到语言版本。因此,来自法国的用户在进入 mydomain.com 时会被重定向到 mydomain.com/fr/(这是通过 Maxmind 的 Javascript API 完成的,并且确实有效)。我唯一不想(!)发生的事情是说英语的用户访问 mydomain.com/en。相反,URL 应该只是 mydomain.com。当我添加你给我的两行代码来删除文件夹时,我得到一个永无止境的循环,因为它使用主目录中的文件而不是子文件夹 /en 中的文件。
    • @Student google "geoip",所有这些都超出了您的问题范围
    • @Student plus,那些规则work perfectly fine for me,没有循环
    猜你喜欢
    • 2013-08-27
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 2017-09-08
    • 2012-09-07
    • 2012-06-24
    相关资源
    最近更新 更多