重写一个别名目录

我试图首先使用Alias文件夹将我的项目文件存储在与我的DocumentRoot不同的位置,然后在此请求上执行一个mod_rewrite 。 但是它似乎没有parsing.htaccess文件。

这是我的别名文件的内容:

 Alias /test F:/Path/To/Project <Directory F:/Path/To/Project> Order allow,deny Allow from all </Directory> 

这是我的.htaccess文件:

 Options +FollowSymlinks RewriteEngine on RewriteRule .* index.php [NC] [PT] 

当我删除别名一切正常。

mod_alias始终优先于mod_rewrite。 你永远不能用mod_rewrite覆盖mod_alias指令。

在这种情况下, AliasMatch指令可以帮助您。

这是一个解决方案,可能会解决您尝试使用别名和重写但不能因为冲突而导致的一些情况。

假设某个特定应用程序的DocumentRoot/var/www/example.com/myapp ,并且具有以下基本目录结构,公共请求可以是public文件(例如,css文件),也可以通过其他方式路由index.php

 myapp/ |- private_library/ |- private_file.php |- private_configs/ |- private_file.php |- public/ |- index.php |- css/ |- styles.css 

目标是只提供public_webroot内的public_webroot ,但是,URL应该是example.com/myapp而不是example.com/myapp/public

以下似乎应该工作:

 DocumentRoot /var/www/example.com Alias /myapp /var/www/example.com/myapp/public <Directory /var/www/example.com/myapp/public> # (or in this dir's .htaccess) RewriteEngine On RewriteBase /public RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?q=$1 [QSA,PT] </Directory> 

但是,如果你请求一个不存在的文件的URL(也就是应该通过index.php路由的文件),这将导致无限循环。

一个解决方案是使用mod_alias,而是在应用程序的根目录中使用mod_rewrite,如下所示:

 DocumentRoot /var/www/example.com <Directory /var/www/example.com/myapp> # (or in this dir's .htaccess) RewriteEngine On RewriteRule (.*) public/$1 [L] </Directory> <Directory /var/www/example.com/myapp/public> # (or in this dir's .htaccess) RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?q=$1 [QSA,L] </Directory> 

就这样!