两个htaccess文件控制一个网站

时间:2014-11-14 19:29:26

标签: .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\.
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)。

3 个答案:

答案 0 :(得分:0)

不是那么容易,但我认为这是因为在.htaccess文件(1)中你的链接来自根目录,而不是根源......

尝试使用:.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 index.php?lang=sk [L,QSA]

答案 1 :(得分:-1)

看看

RewriteCond %{REQUEST_URI} !^domains/
RewriteCond %{REQUEST_URI} !^/domains/

这里是你测试REQUEST_URI是否以“”或“ / domains ”开头 但是在之前的htaccess中,您保证REQUEST_URI将以 www

开头

你可能想要REQUEST_FILENAME而不是REQUEST_URI

答案 2 :(得分:-1)

我花了很多时间尝试在htaccess中解决它,但没有任何效果。 所以我只是301重定向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();
}