TJH*_*vel 7 apache mod-rewrite mod-alias
我正在尝试首先使用Alias文件夹将项目文件存储在与我不同的位置DocumentRoot,然后mod_rewrite对此请求执行a .但它似乎没有解析.htaccess文件.
这是我的Alias文件的内容:
Alias /test F:/Path/To/Project
<Directory F:/Path/To/Project>
Order allow,deny
Allow from all
</Directory>
Run Code Online (Sandbox Code Playgroud)
这是我的.htaccess档案:
Options +FollowSymlinks
RewriteEngine on
RewriteRule .* index.php [NC] [PT]
Run Code Online (Sandbox Code Playgroud)
当我删除别名一切正常.
这是一个解决方案,可以解决某些您尝试使用别名和重写但由于冲突而无法使用的情况。
假设您的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
Run Code Online (Sandbox Code Playgroud)
目标是只提供内部内容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>
Run Code Online (Sandbox Code Playgroud)
但是,如果您请求一个不存在的文件的 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>
Run Code Online (Sandbox Code Playgroud)
就这样!
| 归档时间: |
|
| 查看次数: |
14202 次 |
| 最近记录: |