htaccess 重写目录上一级

问题描述 投票:0回答:2

这是我当前的htaccess:

DirectoryIndex main.php

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ main.php/$1 [QSA,L]

SetEnvIf MFW_ENV ^$ MFW_ENV=local

php_flag short_open_tag On
php_value memory_limit "2G"
php_value upload_max_filesize "2G"
php_value post_max_size "2G"

我的 htaccess 已打开:

/project/web/

我的 上有 文件

/project/local

我希望在访问时可以访问

/project/web/local

我正在这样做,所以当我访问时

website.com/local/file.zip

我可以访问:

/project/local/file.zip

相反。这是我的网络目录的上一级。

.htaccess redirect url-rewriting
2个回答
0
投票

您可以在

/project/web/.htaccess:

中拥有此规则
SetEnvIf MFW_ENV ^$ MFW_ENV=local

php_flag short_open_tag On
php_value memory_limit "2G"
php_value upload_max_filesize "2G"
php_value post_max_size "2G"

DirectoryIndex main.php
RewriteEngine On
RewriteBase /project/web/

RewriteCond %{DOCUMENT_ROOT}/project/$1 -f
RewriteRule ^(local/.*)$ /project/$1 [L,NC]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ main.php/$1 [L]

0
投票

由于

../
不是
.htaccess
文件中的选项,因此让服务器继续重定向,直到到达根目录。这会完全重定向到上一级,直到找到目录或文件:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)\/(.*)\/(.*)$ /$1 [R=302,L]

请记住,第一个

(.*)
是最后 2 个斜杠之前的所有内容(在本例中)。它读起来像是第一个目录,但事实并非如此。

您可以在开发工具网络中看到它从

/dir1/dir2/dir3/dir4/someFile.html
/dir1/dir2/dir3/dir4/
/dir1/dir2/dir3
等等。

这是

302
重定向
404 Not Found
资产的一个很好的用例,这样浏览器就不会缓存最终 URL,这将避免返回任何父目录,即使文件存在。

© www.soinside.com 2019 - 2024. All rights reserved.