用htaccess将网站http root指向一个子文件夹?

时间:2013-02-09 21:31:52

标签: php regex .htaccess mod-rewrite apache

如何使用RewriteRule将网站http root指向子文件夹?

我总是使用下面的规则,但现在升级到最新的wamp服务器后,它不再起作用了。为什么呢?

RewriteRule ^/?$  local/applications/bin/oldsite/index.htm [L,QSA]

我想指出,例如,

http://mysite.com/http://mysite.com/local/applications/bin/oldsite/index.htm

或在localhost wamp服务器中,它应该是这样的,

http://localhost/mysite/http://localhost/mysite/local/applications/bin/oldsite/index.htm

有什么想法吗?

而且,

http://localhost/mysite/contact.htmhttp://localhost/mysite/local/applications/bin/oldsite/contact.htm

http://localhost/mysite/about.htmhttp://localhost/mysite/local/applications/bin/oldsite/about.htm

修改

我设法将其他页面指向具有以下规则的特定位置,

RewriteRule ^([a-zA-Z0-9\-]+)\.htm/?$  local/applications/bin/oldsite/$1.htm [L,QSA]

但我还是不能指出

http://localhost/mysite/http://localhost/mysite/local/applications/bin/oldsite/index.htm

3 个答案:

答案 0 :(得分:1)

已更新

你可以试试这个:

Options +FollowSymlinks
RewriteEngine On
RewriteBase /

#### localhost sets of rules
# No target file, go to index.php
RewriteCond %{HTTP_HOST}   localhost     [NC]
RewriteCond %{REQUEST_URI} ^/mysite/?$
RewriteCond %{REQUEST_URI} !index\.htm   [NC]
RewriteRule  .  mysite/local/applications/bin/oldsite/index.htm  [R=301,L]

# Target file, go to file
RewriteCond %{HTTP_HOST}     localhost     [NC]
RewriteCond %{REQUEST_URI}  ^/mysite/([^\.]+)\.htm [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule  .  mysite/local/applications/bin/oldsite/%1.htm  [R=301,L]

#### Live site set of rules
RewriteCond %{HTTP_HOST}   (?:www\.)?mysite\.com  [NC]
RewriteCond %{REQUEST_URI} !index\.htm            [NC]
RewriteCond %{REQUEST_URI} ^/?$
RewriteRule  .  local/applications/bin/oldsite/index.htm [R=301,L]

第一组规则适用于本地主机并永久重定向:

http://localhost/mysite/filename.htm

要:

http://localhost/mysite/local/applications/bin/oldsite/filename.htm

如果传入网址中不存在filename.htm,则替换网址中的filename.htm始终为index.htm

假设字符串mysite是固定字符串,而假设filename是变量。


第二个规则集适用于Web服务器并仅永久重定向

http://mysite.com/

要:

http://mysite.com/local/applications/bin/oldsite/index.htm

在最后一种情况下,如果传入的URL包含任何其他路径,则不会应用该规则。

对于静默映射,请从R=301中删除[R=301,L]

将上述规则集复制到本地和远程根目录中的.htaccess文件中。

答案 1 :(得分:0)

这可能会让你开始(未经测试): 检查请求是否指向特定子文件夹。如果是这样,请将请求重定向到子文件夹。如果需要,您可以在目标中使用。如果更合适,您可以使用另一个,而不是HTTP状态301。

RewriteCond %{REQUEST_URI} !^/(local/applications/bin/oldsite/.*)$
RewriteRule ^(.*)$ http....n/subfolder/%1 [R=301,L]

答案 2 :(得分:-1)

您似乎希望将“oldsite”目录设为Document Root - 对吗?