我陷入了一个问题,试图让我的重写规则发挥作用。
假设以下设置:
文件夹结构如下:
app/
web/ <--- Document-Root
.htaccess <--- My mod_rewrite rules
index.php
vendor/
company/
package/
Folder/
Route.phpvhost将"web/“指向Document,并且降低了安全性,因此允许所有重写:
<Directory "~PATH~\web">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order deny,allow
allow from all
Require all granted
</Directory>现在,我尝试简单地将每个请求(*)重写为"Route.php“(内部的!没有301之类的)。就我的理解而言,如果if将调用"www.example.com/a/b“,那么我希望请求是内部重定向到~PATH~/vendor/vendor/company/package/Folder/Route.php的,在那里我可以获取所有内容,并在PHP中接受请求进行进一步处理。
但是重写失败了。也许不可能在"/../“目录上遍历?!
.htacces的内容:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /../vendor/company/package/Folder
RewriteRule .* - [E=ROUTER:Route.php]
# route calls to router /x/y/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . %{env:ROUTER}?mode=htaccess [QSA,L]
</IfModule>任何帮助都要感谢:)谢谢!
发布于 2014-10-22 14:29:44
尝尝这个
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule .* ../vendor/company/package/Folder/Router.php [L]
</IfModule>编辑:
我在本地的机器上试过了。
此设置工作如下:
RewriteRule .* vendor/company/package/Folder/Router.php [L] 似乎不允许将请求转发到高于Docroot的目录。
我发现这篇文章:
重要部分:
您不能重写到文档根目录之外。这是一个安全问题.
EDIT2:
更多信息:重写-版本2.4
引文:
URL-路径 指向要服务的资源的相对路径。注意,mod_rewrite试图通过检查路径的第一段是否存在于文件系统的根目录来猜测您是指定了文件系统路径还是指定了URL路径。例如,如果您指定一个替换字符串/ www /file.html,那么这将被视为一个URL路径,除非根目录或文件系统中存在一个名为www的目录(或者,在.htaccess文件中使用重写的情况下,它相对于您的文档根),在这种情况下,它将被视为文件系统路径。如果希望将其他URL映射指令(如Alias)应用于结果URL路径,请使用如下所述的PT标志。
https://stackoverflow.com/questions/26507740
复制相似问题