我试图首先使用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>
就这样!