试图得到

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]

我做错了什么?


当前回答

我搜索了一下,得到了这些结果:

RewriteEngine在RewriteBase上 / RewriteRule ^index.(.*)?$ http://domain.com/subfolder/ (r = 301) 这将使任何尝试转向 访问一个名为index的文件。的东西 您的子文件夹,是否文件 存在与否。

或者试试这个:

RewriteCond % {HTTP_HOST} 样品! ^ www。com美元(NC) RewriteRule ^(*)美元。 % {HTTP_HOST} - samlse / 1 (R = 301美元,L]

我没有在.htaccess文件中做很多重定向,所以我不确定这是否会工作。

其他回答

我搜索了一下,得到了这些结果:

RewriteEngine在RewriteBase上 / RewriteRule ^index.(.*)?$ http://domain.com/subfolder/ (r = 301) 这将使任何尝试转向 访问一个名为index的文件。的东西 您的子文件夹,是否文件 存在与否。

或者试试这个:

RewriteCond % {HTTP_HOST} 样品! ^ www。com美元(NC) RewriteRule ^(*)美元。 % {HTTP_HOST} - samlse / 1 (R = 301美元,L]

我没有在.htaccess文件中做很多重定向,所以我不确定这是否会工作。

实现这一目标有两种可能的解决方案: 1. 在根文件夹中创建一个。htaccess文件,如下所示(只需将example.com和my_dir替换为相应的值):

<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“/”到另一个文件夹或URL, RedirectMatch ^/$ http://www.example.com/my_dir

要设置从根目录到子目录的不可见重定向,可以在/root/中使用下面的RewriteRule。htaccess:

RewriteEngine on

RewriteCond %{REQUEST_URI} !^/subfolder
RewriteRule ^(.*)$ /subfolder/$1 [NC,L]

上面的规则将从内部重定向浏览器:

http://example.com/

to

http://example.com/subfolder

And

http://example.com/foo

to

http://example.com/subfolder/foo

而浏览器将停留在根文件夹上。

我认为你发布的代码的主要问题是:

第一行在严格以sample.com开头的主机上匹配,因此www.sample.com不匹配。 第二行至少需要一个字符,然后是www.sample.com,它也不匹配(为什么要转义第一个w?) 所包含的规则都没有重定向到您在目标中指定的url(另外,sample被拼错为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]

我不会通过指出另一种可能的语法来回答最初的问题(其他答案中有许多),而是通过指出我曾经不得不处理的一些问题,这花了我一段时间来解决:

我做错了什么?

有可能%{HTTP_HOST}没有被正确填充,或者根本没有填充。虽然,我只在共享主机上的一台机器上看到过这种情况,使用一些自定义补丁的apache 2.2,但这仍然是一种可能性。