Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache .htaccess获取变量作为子域_Apache_.htaccess_Mod Rewrite_Url Rewriting_Subdomain - Fatal编程技术网

Apache .htaccess获取变量作为子域

Apache .htaccess获取变量作为子域,apache,.htaccess,mod-rewrite,url-rewriting,subdomain,Apache,.htaccess,Mod Rewrite,Url Rewriting,Subdomain,我有一个网站,我正在手动翻译。正常版本为英语,翻译版本为西班牙语 翻译版本可通过(espanol的es)访问 我希望域后的URL不受翻译更改的影响,因此我尝试使用 这是我的htaccess的当前状态: RewriteCond %{HTTP_HOST} !^example\.site$ RewriteRule home/$ /index.php [L,QSA] RewriteRule contact-us/$ /contact-us.php [L,QSA] RewriteRule our-loca

我有一个网站,我正在手动翻译。正常版本为英语,翻译版本为西班牙语

翻译版本可通过(espanol的es)访问 我希望域后的URL不受翻译更改的影响,因此我尝试使用

这是我的htaccess的当前状态:

RewriteCond %{HTTP_HOST} !^example\.site$
RewriteRule home/$ /index.php [L,QSA]
RewriteRule contact-us/$ /contact-us.php [L,QSA]
RewriteRule our-location/$ /our-location.php [L,QSA]
RewriteRule gallery/$ /gallery.php [L,QSA]
RewriteRule (.*)/$ /user.php?display_name=$1 [L,QSA]

RewriteCond %{HTTP_HOST} !^es\.example\.site$
RewriteRule home/$ /index.php?language=es [L,QSA]
RewriteRule contact-us/$ /contact-us.php?language=es [L,QSA]
RewriteRule our-location/$ /our-location.php?language=es [L,QSA]
RewriteRule gallery/$ /gallery.php?language=es [L,QSA]
RewriteRule (.*)/$ /user.php?language=es&display_name=$1 [L,QSA]
第一套规则在下面^示例.site$all从下面覆盖规则^因此,当我访问包含或不包含“es”子域的页面时,无论采用哪种方式,我都会得到英文版本。如果我将子域规则(和重写条件)置于非子域规则之上,则会发生相同的情况,只是站点仅翻译为西班牙语

任何帮助都将不胜感激

编辑:

由于@hjpotter92的帮助,这些规则已被修改

RewriteRule ^home/?$ /index.php [NC,QSA,S=3]
RewriteRule ^(contact-us|our-location|gallery)/?$ /$1.php [NC,QSA,S=2]
RewriteRule ^(?!user\.php).*/$ /user.php?display_name=$0 [NC,QSA]

RewriteCond %{HTTP_HOST} ^es\.example\.site$ [NC]
RewriteCond %{QUERY_STRING} !language=es [NC]
RewriteRule ^.*$ /$0?language=es [L,QSA]

您可能正试图实现以下目标:

RewriteEngine On

RewriteRule ^home/?$ /index.php [NC,QSA,S=3]
RewriteRule ^(contact-us|our-location|gallery)/?$ /$1.php [NC,QSA,S=2]
RewriteRule ^(?!user\.php).*/$ /user.php?display_name=$0 [NC,QSA]

RewriteCond %{HTTP_HOST} ^es\.example\.com$ [NC]
RewriteCond %{QUERY_STRING} !language=es [NC]
RewriteRule ^.*$ /$0?language=es [L,QSA]

多么快速有效的回答!对非子域规则的修订非常有效。但是由于某种原因,子域规则会抛出500个内部服务器错误。当然。我得到了重复的一行:“由于可能的配置错误,请求超过了10个内部重定向的限制。如果需要,使用'LimitInternalRecursion'增加限制。使用'LogLevel debug'获得回溯。”@awl19再次更新了规则。请检查所做的更改。没有更多的错误,使用子域就是正确地使用get变量,但是不管出于什么原因,继续该域的“子文件夹”使用的是user.php规则,而不是指定的规则。换句话说,实际上是将规则中每个
S=
的值增加1,而不是@awl19。我还将在自己的服务器上运行一些测试。顺便问一下,您使用的是哪一个apache版本?