【发布时间】:2017-03-01 20:34:24
【问题描述】:
我有以下 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.com 或www.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]
【问题讨论】:
标签: php apache .htaccess redirect mod-rewrite