apache - .htaccess页面和lang错误

标签 apache .htaccess mod-rewrite

我尝试查看stackoverflow,但找不到答案。

所以我需要找出用户是哪个子域以及正在加载哪个页面。


例如:en.domain.com/contactus


这应该加载英语“联系我们”页面。

我所拥有的是:

RewriteCond %{HTTP_HOST} ^(www\.)?domain.com$ [NC]
RewriteRule ^(.*)$ index.php?lang=en&page=$1 [L,NC]

RewriteCond %{HTTP_HOST} ^en.domain.com$ [NC]
RewriteRule ^(.*)$ index.php?lang=en&page=$1 [L,NC]
RewriteCond %{HTTP_HOST} ^fr.domain.com$ [NC]
RewriteRule ^(.*)$ index.php?lang=fr&page=$1 [L,NC]
#etc...


但是由于某些原因,当我回显get for页面时,该值为:index.php,因此我无法读取该页面。

最佳答案

这是您应该使用的:

RewriteEngine On
RewriteBase /

SetEnvIf Host ^www\. lang=en
SetEnvIf Host ^en\. lang=en
SetEnvIf Host ^fr\. lang=fr

RewriteCond %{REQUEST_URI} !\.(css|png|gif|jpe?g|js)$ [NC]
RewriteRule ^([a-z0-9_\-]+)/?$ index.php?lang=%{ENV:lang}&page=$1 [L,NC,QSA]


将从%{ENV:lang}(从子域)读取SetEnvIf,并设置您将从$_GET['lang'];获取的正确语言(在您的PHP代码中-假设是PHP)

这样,将动态加载任何子域,而无需一遍又一遍地为子域创建规则。我还添加了防止将图像或JavaScript作为页面加载的规则。

关于apache - .htaccess页面和lang错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8619882/

相关文章:

php - 未指定输入文件。 Laravel 5.5 CentO

.htaccess - 如何设置 htaccess 和 mod_rewrite 以使用域通配符?

apache - htaccess 使用子域和 https 重定向

Apache mod_rewrite 继承中的疯狂

c++ - 如何 'web enable' 遗留 C++ 应用程序

php - 请求超出了 10 个内部重定向的限制

apache - 在 apache 中将私有(private)域重定向到公共(public)域

apache - .htaccess - 重定向 anchor 链接

.htaccess 无需重定向重写多个 url

php - 利用浏览器缓存 - 无法使 Minify php 的 max-age 工作