htaccess将两个子目录重写为root

时间:2017-03-01 20:34:24

标签: php apache .htaccess redirect mod-rewrite

我有以下htaccess文件:

RewriteCond %{HTTP_HOST} ^(www.)?domain.com$
RewriteCond %{REQUEST_URI} !^/site/v1/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /site/v1/$1
RewriteCond %{HTTP_HOST} ^(www.)?domain.com$
RewriteRule ^(/)?$ site/v1/ [L]

因此,当我访问domain.comwww.domain.com时,我会直接转到domain.com/site/v1,而不会在浏览器上显示/site/v1部分。

但我的问题是,在site/v1文件夹中,有admin个文件夹,其中包含网站的CMS,当我访问domain.com/admin时,它会重定向到domain.com/site/v1/admin/site/v1部分显示在浏览器上。

所以,我的问题是,如何在不显示所有路径的情况下访问/site/v1/admin文件夹,即当我访问domain.com/admin时,它访问子文件夹,但不是显示它?

在其他格式中,我有:
  - 我访问domain.com/about
  - 在服务器端,我实际上在domain.com/site/v1/about
  - 在我的浏览器中,我看到domain.com/about
  - ps:about这里是一个通过RewriteCond指令(在另一段代码上)传递给我的后端的参数,不是文件夹(但它与文件夹一样)

我也有:
  - 我访问domain.com/admin
  - 在服务器端,我实际上在domain.com/site/v1/admin
  - 在我的浏览器中,我看到domain.com/site/v1/admin

我想要的是什么:
  - 之前的最后一项"我看到domain.com/admin"

谢谢!

修改

以下是更改后的完整htaccess文件:

# force ssl
RewriteEngine on
RewriteCond     %{SERVER_PORT} ^80$
RewriteRule     ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

RewriteCond %{HTTP_HOST} ^(www.)?domain.com$
RewriteCond %{REQUEST_URI} !^/site/v1/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /site/v1/$1
RewriteCond %{HTTP_HOST} ^(www.)?domain.com$
RewriteRule ^admin/$ /site/v1/admin/ [L]
RewriteRule ^(/)?$ site/v1/ [L]

1 个答案:

答案 0 :(得分:0)

重写基本网址的一种简单方法是向我们提供这样的重写规则。

RewriteRule ^$ /site/v1/ [L]

要解决您的管理目录问题,只需添加以及此类附加规则。:

RewriteRule ^admin/$ /site/v1/admin/ [L]