Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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
.htaccess 两个htaccess文件控制一个网站_.htaccess_Mod Rewrite - Fatal编程技术网

.htaccess 两个htaccess文件控制一个网站

.htaccess 两个htaccess文件控制一个网站,.htaccess,mod-rewrite,.htaccess,Mod Rewrite,当我去 www.mydomain.tld/sk/ 一切正常,链接没有改变。 但是当我删除正斜杠时 www.mydomain.tld/sk 页面更改为 www.mydomain.tld/domains/mydomain.tld/sk/?lang=sk 有人能帮忙吗?如何避免链接被更改? 当我访问www.mydomain.tld/sk时,我需要它保持不变 .htaccess文件(1): RewriteEngine On RewriteCond %{HTTP_HOST} !^www\. Rew

当我去

www.mydomain.tld/sk/
一切正常,链接没有改变。 但是当我删除正斜杠时

www.mydomain.tld/sk 
页面更改为

www.mydomain.tld/domains/mydomain.tld/sk/?lang=sk
有人能帮忙吗?如何避免链接被更改? 当我访问www.mydomain.tld/sk时,我需要它保持不变

.htaccess文件(1)

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301]
RewriteRule ^sk$ /index.php?lang=sk [L,QSA]
RewriteRule ^sk/$ /index.php?lang=sk [L,QSA]
RewriteRule ^sk/index /index.php?lang=sk [L,QSA]
顶部主目录中还有另一个.htaccess文件(2) 它包含这些行

RewriteEngine On
RewriteCond %{REQUEST_URI} !^domains/
RewriteCond %{REQUEST_URI} !^/domains/
RewriteCond %{HTTP_HOST} ^(www\.)?(.*)$
RewriteCond %{DOCUMENT_ROOT}/domains/%2 -d
RewriteRule (.*) domains/%2/$1 [DPI,L]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^domains/[^/]+/(.+[^/])$ /$1/ [R]
Options -indexes
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule /?([A-Za-z0-9_-]+)/?$ index.php?id=$1 [QSA,L]
此.htaccess文件有助于导航我在服务器上运行的域。 所有网站都位于一个目录/域中。 例如,www.mydomain.tld指向/domains/mydomain.tld目录。 此目录中是较短的htaccess文件(1)。

请查看

RewriteCond %{REQUEST_URI} !^domains/
RewriteCond %{REQUEST_URI} !^/domains/
如果请求URI不是以“”或“/domains”开头,您可以在这里进行测试 但是,在前面的htaccess中,您保证请求URI将以www


您可能希望在这里使用REQUEST\u FILENAME而不是REQUEST\u URI,这并不容易,但我认为这是因为在.htaccess文件(1)中,您的链接来自根,而不是根

尝试使用:.htaccess文件(1):


我花了很多时间试图在htaccess中解决这个问题,但都没用。 所以我只是在php中重定向了错误的链接:

if ($_SERVER['REQUEST_URI']=="/domains/mydomain.tld/sk/?lang=sk") {
  header("HTTP/1.1 301 Moved Permanently");
  header("Location: http://www.mydomain.tld/sk/");
  exit();
}

您保证请求URI将以www开头
这是不正确的您误读了他的规则。他保证域将以
www
开始,而不是域后的路径
REQUEST\u URI
包含域名后的所有内容,例如
www.domain.com/test
REQUEST\u URI
将是
/test
。它没有帮助。链接www.mydomain.tld/sk仍将重写到www.mydomain.tld/domains/mydomain.tld/sk/?lang=sk仅进行一次测试,您能否尝试删除文件2中的两行:
RewriteCond%{REQUEST\u FILENAME}-RewriteRule^domains/[^/]+/(.+[^/])$/$1/[R]
无效。没有任何更改。您确定不是因为缓存了结果吗?您应该使用[R=302]进行测试
if ($_SERVER['REQUEST_URI']=="/domains/mydomain.tld/sk/?lang=sk") {
  header("HTTP/1.1 301 Moved Permanently");
  header("Location: http://www.mydomain.tld/sk/");
  exit();
}