如何为beta(子目录)配置htaccess,保持root htacess不变

时间:2017-07-04 19:15:17

标签: php apache .htaccess mod-rewrite

我在根文件夹中有实时网站,现在我已经创建了一个子目录来保持开发更改并在服务器上测试它们,如何为子目录配置htaccess,我想让实时网站保持运行。

目前我的htaccess如下,类似于root htaccess

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]


RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f


RewriteRule ^(member-([0-9]+)-([a-zA-Z0-9\-]+))/?$ team.php?id=$2&%{QUERY_STRING} [NC,L]

请帮帮我

修改:我想通过在网址末尾添加/ beta来访问测试版网站。前https://www.example.com/beta

1 个答案:

答案 0 :(得分:0)

多个.htaccess个文件

您可能只需在子目录中创建相同的.htaccess并删除RewriteBase命令就可以了 - 在大多数情况下它确实不需要,除非重写文档根目录上的文件路径,正确配置可能会让人感到困惑。

以下是一个示例设置:

+- DOCROOT/index.php :

   <?php echo $_SERVER['PATH_INFO'];

+- DOCROOT/.htaccess :

   RewriteEngine On
   RewriteBase /
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^(.*) index.php/$1

+- DOCROOT/subdir/index.php :

   <?php echo $_SERVER['PATH_INFO'];

+- DOCROOT/.htaccess :

   RewriteEngine On
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^(.*) index.php/$1

通过该设置,您可以致电http://server/some-path并看到/some-path回传,或致电http://server/subdir/other-path并看到/other-path回复。

.htaccess

您还可以在文档根目录中的主.htaccess文件中添加子目录的重写规则 - 只需复制最后一个重写链(唯一有趣的一个)并添加{{ 1}}到第一个仅限于子目录的那个。

以上面的例子为例,它可能如下所示:

RewriteCond

(我还使用了libery来删除冗余的RewriteEngine On RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L] RewriteBase / RewriteCond %{REQUEST_URI} subdirectory/ RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^subdirectory/(member-([0-9]+)-([a-zA-Z0-9\-]+))/?$ subdirectory/team.php?id=$2&%{QUERY_STRING} [NC,L] RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(member-([0-9]+)-([a-zA-Z0-9\-]+))/?$ team.php?id=$2&%{QUERY_STRING} [NC,L] 命令)。如果请求到达子目录,它将被第一个规则捕获,使用子目录上下文重写,RewriteEngine On标志将导致mod_rewrite停止处理。否则它将执行主路由。这个设置有点过于复杂,我可能会使用额外的.htaccess文件。