我在将URL重定向到Nginx中的url时遇到问题:
例如,我有一个链接:
https://example.com/oferty-specjalne/szczegoly-oferty?OfferID=124296
工作功能:
import Foundation
import UIKit
class PaginatedCardScrollView: UIScrollView {
convenience init() {
self.init(frame: CGRect.zero)
}
override init(frame: CGRect) {
super.init(frame: frame)
_setup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
_setup()
}
private func _setup() {
isPagingEnabled = true
isScrollEnabled = true
clipsToBounds = false
showsHorizontalScrollIndicator = false
}
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
// Asume the scrollview extends uses the entire width of the screen
return point.y >= frame.origin.y && point.y <= frame.origin.y + frame.size.height
}
}
不起作用的功能:
location ^/oferty-specjalne/szczegoly-oferty(.*)$ {
return 301 https://example.com/oferty-specjalne/; }
我检查了测试仪中的正则表达式,一切正常。 我想要的信息是我在哪里犯了错误,以及如何解决它,或者例如。
答案 0 :(得分:0)
07-Dec-18 01.00.54.9840000 PM
之后的URI部分是查询字符串(或参数),而不是?
和location
指令使用的规范化URI的一部分-因此您的规则永远不会匹配。有关详细信息,请参见FORMAT() is nice and all, but…。
如果您有复杂的正则表达式需要与整个URI(包括查询字符串)匹配,则需要使用rewrite
变量。可以使用$request_uri
或if
进行测试。拥有多个正则表达式的情况下,map
是首选解决方案。
例如:
map
按顺序对正则表达式求值,直到找到匹配的规则为止,因此对规则进行排序的最具体的优先顺序和最不具体的最后顺序。
使用命名捕获,因为数字捕获可能会超出范围。
如果它们相同,则无需指定方案或域名。
map $request_uri $redirect {
default 0;
~^/oferty-specjalne/szczegoly-oferty\?OfferID=(124170|124296|124299|123483|63788|97002)$
/oferty-specjalne/;
~^/oferty-specjalne/szczegoly-oferty\?OfferID=(?<offerid>.*)$ /oferty-specjalne/$offerid;
~^/oferty-specjalne/szczegoly-oferty\?OfferID=97002 /oferty-specjalne/;
~^/oferty-specjalne/szczegoly-oferty /oferty-specjalne/;
}
server {
...
if ($redirect) {
return 301 $redirect;
}
指令位于`server块之外。
有关详细信息,请参见this document。