.htaccess重写将根URLredirect到子目录
试图得到
www.example.com
直接去
www.example.com/store
我已经尝试了多位代码,没有工作。
我试过了:
Options +FollowSymlinks RewriteEngine on RewriteCond %{HTTP_HOST} ^example.com$ RewriteRule (.*) http://www.example.com/$1 [R=301,L] RewriteCond %{HTTP_HOST} ^(.+)\www.example\.com$ RewriteRule ^/(.*)$ /samle/%1/$1 [L]
我究竟做错了什么?
您可以使用重写规则,使用^ $来表示根目录,并将其重写到/ store目录,如下所示:
RewriteEngine On RewriteRule ^$ /store [L]
尝试这个:
RewriteEngine on RewriteCond %{HTTP_HOST} ^example\.com$ RewriteRule (.*) http://www.example.com/$1 [R=301,L] RewriteRule ^$ store [L]
如果您需要外部redirect(导致访问的浏览器显示redirect的URL),请在此处设置R
标志:
RewriteRule ^$ /store [L,R=301]
我很惊讶,没有人提到这个:
RedirectMatch ^/$ /store/
基本上,它redirect根和只有根URL。 答案来自这个链接
这是我用来redirect到一个子目录。 这做了不可见的,仍然允许通过匹配现有的文件或其他任何请求。
RewriteEngine on RewriteCond %{HTTP_HOST} ^(www.)?site.com$ RewriteCond %{REQUEST_URI} !^/subdir/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /subdir/$1 RewriteCond %{HTTP_HOST} ^(www.)?site.com$ RewriteRule ^(/)?$ subdir/index.php [L]
用您的值更改site.com和subdir。
如果要重写URL并隐藏原始url,可以使用另一种方法:
RewriteEngine on RewriteRule ^(.*)$ /store/$1 [L]
有了这个,例如,如果您键入http://www.example.com/product.php?id=4
,它将透明地打开http://www.example.com/store/product.php?id=4
的文件http://www.example.com/store/product.php?id=4
但没有向用户显示完整的url。
要设置从根目录到子目录的不可见redirect,可以在/root/.htaccess中使用以下RewriteRule:
RewriteEngine on RewriteCond %{REQUEST_URI} !^/subfolder RewriteRule ^(.*)$ /subfolder/$1 [NC,L]
上面的规则将内部redirect浏览器:
至
和
至
而浏览器将保留在根文件夹中。
这似乎是最简单的解决scheme:
RewriteEngine on RewriteCond %{REQUEST_URI} ^/$ RewriteRule (.*) http://www.example.com/store [R=301,L]
我得到了一些其他解决scheme的redirect循环。
我不明白你的问题
如果要将每个请求redirect到子文件夹,请执行以下操作:
RewriteRule ^(.*)$ shop/$1 [L,QSA] http://www.example.com/* -> wwwroot/store/*
如果你想redirect到具有域名的子文件夹
RewriteCond %{HTTP_HOST} ([^\.]+\.[^\.]+)$ RewriteRule ^(.*)$ %1/$1 [L,QSA] http://www.example.com/* -> wwwroot/example.com/*
我发现为了避免循环redirect,将redirect的范围限制在根目录是很重要的。 我会用:
RewriteEngine on RewriteCond %{REQUEST_URI} ^/$ RewriteRule (.*) http://www.example.com/store [R=301,L]
上面的大部分解决scheme都是正确的,但是都缺lessredirect的透明度。
就我而言,访问http://www.example.com时,;我想将其redirect到子目录/商店,但不更新URL到http://www.example.com/store 。 (我想要的是从该目录获得页面代码)。 如果这是你的情况,下面的解决scheme完美的作品。
RewriteEngine on RewriteCond %{HTTP_HOST} example\.com [NC] RewriteCond %{REQUEST_URI} ^/$ RewriteRule ^(.*)$ /store/$1 [L]
来源: http : //wiki.dreamhost.com/Transparently_redirect_your_root_directory_to_a_subdirectory
以前我使用下面的代码正确地工作,将每个域/子域的根URLredirect到它们的子对象的子目录,这些子目录完全像它自己的子/域一样命名如下:
RewriteCond %{HTTP_HOST} ^sub1.domain1.com RewriteCond %{REQUEST_URI} !subs/sub1.domain1.com/ RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA] RewriteCond %{HTTP_HOST} ^sub2.domain1.com RewriteCond %{REQUEST_URI} !subs/sub1.domain2.com/ RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA] RewriteCond %{HTTP_HOST} ^sub1.domain2.com RewriteCond %{REQUEST_URI} !subs/sub1.domain2.com/ RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA] RewriteCond %{HTTP_HOST} ^sub2.domain2.com RewriteCond %{REQUEST_URI} !subs/sub2.domain2.com/ RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]
但是,当我想添加其他子或域,那么它将需要添加在上面的代码。 将其简化为像通配符(*)那样工作应该更方便一些,如下所示:
RewriteCond %{HTTP_HOST} ^sub RewriteCond %{REQUEST_URI} !/subs/ RewriteRule ^(.*)$ subs/%{HTTP_HOST}/$1 [L,QSA]
所以,只要子域名的前缀是子域(比如:sub3.domain1.com,sub1.domain3.com等),只要添加了其他子域/域,代码将保持有效。
也可以使用redirect来达到这个目的
Redirect 301 / www.example.com/store
或映射的别名
Alias / /store
编辑: mod_alias只适用于httpd.conf。
Refrences
我认为你发布的代码的主要问题是:
-
第一行匹配以严格sample.com开头的主机,所以www.sample.com不匹配。
-
第二行至less要有一个字符,然后是www.sample.com,这个字符也是不匹配的(你为什么要逃出第一个字符?)
-
所包含的规则都不会redirect到您在目标中指定的url(另外,样本被拼写为samle,但这是无关紧要的)。
作为参考,这里是你现在的代码:
Options +FollowSymlinks RewriteEngine on RewriteCond %{HTTP_HOST} ^sample.com$ RewriteRule (.*) http://www.sample.com/$1 [R=301,L] RewriteCond %{HTTP_HOST} ^(.+)\www.sample\.com$ RewriteRule ^/(.*)$ /samle/%1/$1 [L]
有一点Google,给我这些结果:
RewriteEngine On
RewriteBase /
RewriteRule ^ index。(。*)?$ http://domain.com/subfolder/ [r = 301]这将redirect任何尝试访问名为index.something文件到您的子文件夹,无论文件是否存在。
或者试试这个:
RewriteCond%{HTTP_HOST}!^ http://www.sample.com $ [NC]
RewriteRule ^(。*)$%{HTTP_HOST} / samlse / $ 1 [R = 301,L]
我没有在.htaccess文件中做很多redirect,所以我不知道这是否会工作。
尝试在htaccess中使用下面的行
注意:您可能需要检查default.html的名称
default.html是根文件夹中默认加载的文件。
RewriteEngine
Redirect /default.html http://example.com/store/
实现这个目标的可能的解决scheme有两种方法:1.在根文件夹下创build一个.htaccess
文件(只需将example.com和my_dirreplace为相应的值):
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_HOST} ^(www.)?example.com$ RewriteCond %{REQUEST_URI} !^/my_dir/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /my_dir/$1 RewriteCond %{HTTP_HOST} ^(www.)?example.com$ RewriteRule ^(/)?$ my_dir/index.php [L] </IfModule>
-
使用RedirectMatch将根URL“/”redirect到另一个文件夹或URL,
RedirectMatch ^ / $ http://www.example.com/my_dir
您只需将这些代码添加到.htaccess文件中
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /folder/index.php [L] </IfModule>