我想将我的网站国际化,以便可以使用多种语言访问.将自动在请求数据中检测语言设置,并且可以在用户的设置中覆盖/存储在会话中.
我的问题是关于如何根据页面的URL显示基于语言的同一页面的各种版本.假设我们只是查看索引页面http://www.example.com/
,默认为英文.现在,如果讲法语的人加载索引页面,我应该只保留URL http://www.example.com/
,还是应该将其重定向到http://www.example.com/fr/
?
我试图弄清楚这在SEO方面有什么好处或后果.我不希望该网站的法语版本显示在google.com上,如果它阻止相同页面的英文版本显示在那里,但我希望它显示在google.fr中.
我正在使用Angular ui-router并在初始化控制器之前为我的一个状态设置了解析功能.我检索一些数据,循环并匹配URL stateParam,如果找到匹配,解析对控制器的承诺并在promise中返回该对象.这一切都运作良好.
但是,如果未找到匹配项,我只想通过拒绝承诺并运行来重定向到其他状态 $state.go('state');
这个:
deferred.reject();
$state.go('state',{params: 'param'});
Run Code Online (Sandbox Code Playgroud)
但这似乎没有做任何事情.控制器只是挂起,我没有控制台错误或任何东西.有任何想法吗?
这个问题适用于版本0.xx,版本1.xx中的许多内容已经改变
如果http://foo.com
重定向到重定向到的1.2.3.4
重定向http://finalurl.com
,我如何使用Ruby找到登陆URL"http://finalurl.com"?
我在我的routes.rb中有以下内容:
resources :users, :except => [:new, :create] do
get 'friends', :as => :friends, :on => :member, :to => "users#friends"
end
Run Code Online (Sandbox Code Playgroud)
并在我的user.rb中关注:
def to_param
self.login
end
Run Code Online (Sandbox Code Playgroud)
例如,当登录点上的用户(例如'any.thing')来自facebook时,rails会发出路由错误(没有找到路由,我想这是因为它将点后面的任何内容识别为格式或因为路径限制).我怎么能克服这个错误?
我正在改写这个问题,因为到目前为止答案显示我没有把它定义得足够好.我将留下原始问题以供参考.
设置路由时,您可以为不同的URL /路由部分指定默认值.让我们考虑VS向导生成的示例:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "DefaultPage", action = "Index", id = UrlParameter.Optional } // Parameter defaults
Run Code Online (Sandbox Code Playgroud)
在此示例中,如果未指定controller,将使用DefaultPageController,如果未指定action,则将使用"Index"操作.网址通常如下:http://mysite/MyController/MyAction
.
如果Url中没有这样的操作:http://mysite/MyController
那么将使用索引操作.
现在让我们假设我的控制器Index和AnotherAction中有两个动作.与它们对应的URL 分别是http://mysite/MyController
和http://mysite/MyController/AnotherAction
.我的"索引"操作接受参数id.所以如果我需要将参数传递给我的Index动作,我可以这样做:http://mysite/MyController/Index/123
.请注意,与URL不同http://mysite/MyController
,我必须明确指定Index操作.我想做的是能够通过http://mysite/MyController/123
而不是http://mysite/MyController/Index/123
.我不需要此URL中的"索引"我希望mvc引擎识别,当我要求时http://mysite/MyController/123
,123不是动作(因为我没有定义具有此名称的动作),而是我的默认动作的参数"指数".如何设置路由来实现此目的?
以下是问题的原始措辞.
我有一个控制器,有两种方法,这样定义
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(SomeFormData data)
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
这允许我http://website/Page
在用户导航到此URL(GET)时以及随后回发表单(POST)时处理Url .
现在,当我处理回发帖时,在某些情况下我想将浏览器重定向到此网址:
http://website/Page/123
Run Code Online (Sandbox Code Playgroud)
其中123是一个整数,我需要一个方法来处理我的控制器中的这个URL.
如何设置路由,这有效吗?目前我有向导生成的"默认"路由,如下所示:
routes.MapRoute(
"Default", // Route …
Run Code Online (Sandbox Code Playgroud) Flask提供了一种url_for
功能,可根据URL模式为处理程序生成URL.但这意味着处理程序函数必须在整个应用程序中具有唯一的名称.那是对的吗?
例
模块A有一个处理程序index
:
@app.route('/')
def index(): pass
Run Code Online (Sandbox Code Playgroud)
模块B有另一个处理程序index
:
@app.route('/anotherindex')
def index(): pass
Run Code Online (Sandbox Code Playgroud)
如何区分index
构建URL时调用的处理程序?
url_for('index')
Run Code Online (Sandbox Code Playgroud) 我有一个项目有2个区域/管理员和/用户.
管理员的默认路由是/ Admin/Home/Index,用户的默认路由是/ User/Home/Index.
是否可以实现路由以使其主页URL看起来像/ Profile/Index,但是显示来自/ Admin/Home/Index for admins和/ User/Home/Index for users的内容?
UPD
最后找出如何做到这一点
context.MapRoute(
"Admin",
"Profile/{action}",
new { area = AreaName, controller = "Home", action = "Index" },
new { RoleConstraint = new Core.RoleConstraint() },
new[] { "MvcApplication1.Areas.Admin.Controllers" }
);
...
context.MapRoute(
"User",
"Profile/{action}",
new { area = AreaName, controller = "Home", action = "Index" },
new { RoleConstraint = new Core.RoleConstraint() },
new[] { "MvcApplication1.Areas.User.Controllers" }
);
public class RoleConstraint …
Run Code Online (Sandbox Code Playgroud) 如果有人能回答以下问题,我将很高兴
那里,
我需要在我的Web API项目中强制使用Lowercase路由.如果它是一个MVC项目,我会使用类似的东西
routes.LowercaseUrls = true;
Run Code Online (Sandbox Code Playgroud)
但是在Web API中,属性不存在.
我尝试了LowercaseRoutesMVC4 NuGet扩展,但我的路由需要有一个自定义处理程序,以便扩展不会帮助我.
我能做什么?
我正在用node.js和express编写一个应用程序.
我已经设置了一个默认路由:
app.get('/', function(req, res){
res.sendfile('./views/index.html');
});
Run Code Online (Sandbox Code Playgroud)
当我转到/ localhost:port /时,这工作正常
但是在我输入任何内容之后的URL中,/ localhost:port/blah我得到了404 ERROR,这是有意义的.
我想设置一个默认路由,这样无论我在localhost:port /之后输入的是什么,它都应该返回相同的html文件.
我尝试更改/到*:
app.get('*', function(req, res){
res.sendfile('./views/index.html');
});
Run Code Online (Sandbox Code Playgroud)
但在我这样做后,我开始在控制台中收到此错误,并且没有显示任何内容:
未捕获的SyntaxError:意外的令牌<
在我的所有Javascript文件中:: 3000/scripts/myscript.js:1
不知何故,我的javascript文件显示HTML的内容
===编辑====
我用过这个,它适用于第一级网址:比如loclhost:port/blah
app.use(function(req, res){
res.sendfile('./views/index.html');
});
Run Code Online (Sandbox Code Playgroud)
但是当URL是多级的时,我看到了与前面描述的相同的问题localhost:port/blah/foo这里的问题是路由器在/ blah文件夹下查找所有javascript和CSS文件的公共目录,在这种情况下,不存在.它返回默认的HTML文件.我该如何解决?
==================编辑发布整个代码=========================== ==============
var http = require('http');
var express = require('express');
var api = require('./routes/api');
var mongoose = require('mongoose');
var app = express();
mongoose.connect('mongodb://localhost/mydb');
app.set('port', process.env.PORT || 3000);
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(express.cookieParser('your secret here'));
app.use(express.session());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
app.get('/api/user/:userid', api.getUserInfo);
app.get('/', …
Run Code Online (Sandbox Code Playgroud) url-routing ×10
asp.net-mvc ×2
javascript ×2
angularjs ×1
asp.net ×1
client-side ×1
express ×1
flask ×1
networking ×1
node.js ×1
promise ×1
python ×1
redirect ×1
rest ×1
routes ×1
routing ×1
ruby ×1
seo ×1
url ×1
wsgi ×1