.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();
}