将子文件夹请求重定向到乘客

时间:2018-10-29 11:08:46

标签: django apache .htaccess mod-rewrite passenger

我想将mysite.com/subfolder/...之类的所有请求重定向到乘客上的Django应用程序,并将所有其他请求重定向到在某些php cms下运行的网站。

文件结构:

  • .htaccess
  • 子文件夹/
    • .htaccess
  • 一些cms文件

.htaccess的内容:

RewriteEngine on

... RewriteConds and RewriteRules generated by php cms

subfolder/.htaccess的内容:

PassengerAppRoot "/home/username/djangoapplication"
PassengerPython "/home/username/virtualenv/webapp/2.7/bin/python2.7"

问题出在根.htaccess上。当根.htaccess为空(仅占用RewriteEngine on)时,mysite.com/subfolder/...之类的请求将由subfolder/.htaccess处理,并且Django应用程序会加载。但是,当根.htaccess包含php cms生成的行时,所有类似mysite.com/subfolder/...的请求都会导致cms出现404错误页面。

因此,我想在mysite.com/subfolder/...之前将来自subfolder/.htaccess的请求过滤到RewriteRule,然后将其替换为404错误页面,但是我不知道该怎么做

1 个答案:

答案 0 :(得分:1)

如果根app.controller('PlotsController', function ($scope, $http, growl, CRUDServiceSchemes, CRUDServicePlots, Upload, $timeout) { $scope.SavePlots = function (isValid, files) { if ($scope.VentureName == null || $scope.VentureName == undefined) { $scope.pventure = false; } else { if (isValid) { var plots = { vID: $scope.VentureName, PlotNo: $scope.PlotNo, PlotArea: $scope.PlotArea } $scope.SelectedFiles = files; if ($scope.SelectedFiles && $scope.SelectedFiles.length) { Upload.upload({ url: '/SuperAdmin/AddVenture/CreatePlots', data: { files: $scope.SelectedFiles } }).then(function (response) { $timeout(function () { $scope.Result = response.data; }); }, function (response) { if (response.status > 0) { var errorMsg = response.status + ': ' + response.data; alert(errorMsg); } }, function (evt) { var element = angular.element(document.querySelector('#dvProgress')); $scope.Progress = Math.min(100, parseInt(100.0 * evt.loaded / evt.total)); element.html('<div style="width: ' + $scope.Progress + '%">' + $scope.Progress + '%</div>'); }); } $http({ method: 'POST', url: '/SuperAdmin/AddVenture/CreatePlots', data: { plots: plots }, dataType: 'JSON', headers: { 'content-type': 'application/json' } }).then(function (response) { if (response.data == "SUCCESS") { $scope.VentureName = null; $scope.PlotNo = ''; $scope.PlotArea = ''; $scope.pventure = true; $scope.validation = true; CRUDServicePlots.getPlots().then(function (result) { $scope.Plot = result; }); growl.success('Successfully Added'); } else { growl.warning('Some thing went wrong, please try again.', { title: 'Warning!' }); } }); } } } }); 文件仅包含mod_rewrite指令,则只需在.htaccess中启用重写引擎,就可以完全覆盖根.htaccess文件。

例如:

/subfolder/.htaccess

默认情况下,默认情况下不继承mod_rewrite指令 (与其他模块不同)。但是,可能已在服务器配置中专门启用了mod_rewrite继承,所以这可能行不通。

如果这不起作用,则需要在根RewriteEngine On PassengerAppRoot "/home/username/djangoapplication" PassengerPython "/home/username/virtualenv/webapp/2.7/bin/python2.7" 文件的顶部创建一个例外,以防止覆盖.htaccess的请求。例如:

/subfolder/

当URL以RewriteRule ^subfolder - [L] 开头时,这会停止在根.htaccess文件中进行进一步的处理。