【问题标题】:htaccess Rewrite two subdirectories to roothtaccess 将两个子目录改写为root
【发布时间】: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.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]

【问题讨论】:

    标签: php apache .htaccess redirect mod-rewrite


    【解决方案1】:

    重写基本 url 的一种简单方法是给我们这样的重写规则。

    RewriteRule ^$ /site/v1/ [L]
    

    要解决您的管理目录问题,只需添加类似这样的附加规则。:

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

    【讨论】:

    • 感谢您的回答,但它仍然不起作用,它的行为相同(我尝试清理缓存,不同的浏览器和计算机 - 只是为了确保)。我用完整的 htaccess 文件编辑了我的帖子。
    • 您使用的是什么 CMS?
    • 我自己开发的
    猜你喜欢
    • 2013-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    相关资源
    最近更新 更多