Apache重写规则将所有请求重定向到包含另一个.htaccess和重写规则的子目录

kis*_*rgy 6 apache mod-rewrite

我的网络服务器上有公共和私人项目.我将所有公共内容放入网络服务器根目录,我有一个private文件夹,我只能从本地网络(由.htaccess设置)到达.

我想简单地将每个私有项目放在private文件夹中并自动处理请求,但希望URL看起来像是从webroot提供的.
例如,如果private/project1我想使用URL http://example.com/project1来提供该文件夹,并且不想更改URL.

这个简单的重写:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ private/$1           
Run Code Online (Sandbox Code Playgroud)

工作,但当我有private/project2另一个.htaccess:

Options +FollowSymLinks
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /project2/

<Files .*>
       Order Deny,Allow
       Deny From All
</Files>

# Allow asset folders through
RewriteRule ^(assets/.+) - [L]

# Protect files from being viewed
RewriteRule ^(uploads.+) - [F,L]


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php/$1 [L]

</IfModule>
Options -Indexes
Run Code Online (Sandbox Code Playgroud)

然后会出现静态内容,但链接会被破坏.我应该修改什么才能工作?

此外,如果我有一个private/project3并浏览到http://example.com/project3/没有问题,但当我浏览到http://example.com/project3(没有尾随/)时,URL将http://example.com/private/project3/在浏览器中可见.为什么?我怎么能避免这种情况?

Nag*_*agh 5

您需要的只是mod_alias。

然后像这样为您的私人项目服务:

Alias /project3 /apache/htdocs/private/project3
Run Code Online (Sandbox Code Playgroud)

使用.htaccess,您将控制访问权限。

如果要控制它而不重启服务器,则可以尝试使用以下配置来实现此目的,该配置可以放在.htaccess文件中:

RewriteRule ^/(project1)$ /private/$1/index.html
RewriteRule ^/(project1/)(.*)$ /private/$1$2
Run Code Online (Sandbox Code Playgroud)

index.html-项目的任何索引文件。这样,URL的公共部分将完全可访问,除了用于私有项目的路径之外。您还可以添加RewriteCond来检查IP并仅对本地网络启用重写。